https://blog.csdn.net/tech_pro/article/details/80269751这篇文章讲了一下如何从emmc中启动系统,本文来说一下如何从SD卡中启动系统。
一、对SD卡进行分区并格式化SD卡
首先从emmc中启动系统,然后执行如下命令来对SD卡进行分区和格式化:
fdisk -c 1 320 2057 520
fatformat mmc 1:1
ext3format mmc 1:2
ext3format mmc 1:3
ext3format mmc 1:4
二、编译u-boot并把它烧写到SD卡中
本部分内容可以参考这篇文章:
https://blog.csdn.net/tech_pro/article/details/80269751三、编译内核并下载内核到SD卡中
3.1 编译内核
参考这篇文章:
https://blog.csdn.net/tech_pro/article/details/802697513.2 下载到SD卡
下载内核到SD卡中有两种方法:从电脑中直接拷贝到SD卡和通过dnw命令来下载
3.2.1 从电脑中直接拷贝内核到SD卡
因为对SD卡进行分区时,内核分区被格式化为fat分区,所以可以直接从电脑中把kernel的镜像的zImage拷贝到SD卡中。
设置开发板从SD卡启动,在u-boot命令行模式下执行以下命令可以下载并启动内核:
fatload mmc 0:1 0x40008000 zImage
bootm 0x40008000
3.2.2 通过dnw命令来下载内核
设置开发板从SD卡启动,在u-boot命令行下执行下面这条命令来下载内核到内存中:
dnw 0x40008000
此时在pc机上执行如下命令来发送内核到开发板内存中(要想在linux主机上使用dnw,需要先安装secbulk.ko驱动):
sudo dnw arch/arm/boot/zImage
通过u-boot命令行下的movi命令把内存中内核数据写到SD开的kernel分区中:
movi write kernel 0 0x40008000
可以在u-boot下执行如下命令来启动内核:
movi read kernel 0 0x40008000
bootm 0x40008000
四、把根文件系统加载到SD卡中
为了把根文件系统写入SD卡的指定分区,需要先通过NFS来挂载网络文件系统,然后通过网络文件系统来挂载根文件系统分区,把根文件系统数据写入这个分区,这样就实现了吧根文件系统加载到SD卡中了,然后重新启动开发板并设置u-boot参数来从SD卡中挂载根文件系统。
4.1 通过NFS来挂载网络文件系统
参考这篇文章:
https://blog.csdn.net/tech_pro/article/details/802697514.2 挂载SD卡的根文件系统分区,复制根文件系统数据
执行命令如下:
开发板:mount /dev/mmcblk0p4 /mnt
PC机:sudo tar -cf francis_linux_fs.tar francis_linux_fs
sudo tar -xvf francis_linux_fs.tar -C francis_linux_fs/
开发板:
cp francis_linux_fs/* mnt/ -rfd
rm -rf francis_linux_fs/
umount mnt/
执行完上面这些命令就可以把根文件系统写到SD卡的第四个分区当中了,然后重新启动系统并设置u-boot参数,这样就实现了从SD卡挂接根文件系统的操作。u-boot参数设置如下:
set bootargs "root=/dev/mmcblk0p4 rootfstype=ext4 console=ttySAC0,115200 init=/linuxrc ctp=2 lcd=S70"
set bootcmd "movi read kernel 0 0x40008000; bootm 0x40008000"
或者
set bootcmd "fatload mmc 0:1 0x40008000 zImage; bootm 0x40008000"
save
boot 或者 reset