在sam9x5上使用SD卡构建完整Linux系统


by Mcuzone




在sd卡上使用完整的linux系统就是整个Linux系统都从SD卡启动,但是整个过程中还是需要借助Linux PC或者Linux来完成一些必要的工作。
为了避免在虚拟机上使用虚拟USB的方式处理SD卡,这里直接使用NAND启动的开发板来完成SD卡的处理。



环境:

1. 有Linux系统可运行的9x5开发板


2. SD卡一张,这里使用一张8GB的高速卡


3. 开发虚拟机,开发板和虚拟机之间网络通畅


4. 参考atmel官方说明

http://www.at91.com/linux4sam/bin/view/Linux4SAM/SDCardBootNotice了解原理




先使用nand版本的Linux启动,查看系统支持ext2文件系统,那么这里对sd就使用ext2:



linux如何制作SD卡镜像 sd卡装linux_启动文件



插上SD卡,系统提示:






linux如何制作SD卡镜像 sd卡装linux_sd卡_02




注意:以下操作会格式化sd卡,如果有数据,请备份。

在将自动mount的分区umount之后,查看sd卡当前的分区信息先:


linux如何制作SD卡镜像 sd卡装linux_启动文件_03



先用fdisk命令查看一下信息,可以看到,当前卡上只有一个fat分区:


linux如何制作SD卡镜像 sd卡装linux_启动文件_04



使用命令d即可删除当前的分区,然后看到sd卡上没有分区:


linux如何制作SD卡镜像 sd卡装linux_sd卡_05



新建一个fat分区,大小为64MB,用来存放sam9x5的sd卡启动所需要的文件:


linux如何制作SD卡镜像 sd卡装linux_linux如何制作SD卡镜像_06



新建一个128MB的ext2分区,用来存放rootfs:


linux如何制作SD卡镜像 sd卡装linux_启动文件_07



再将剩下的空间都作为一个ext2分区,用作系统的数据存储:


linux如何制作SD卡镜像 sd卡装linux_开发板_08



在前面输入w保存改动之后,在系统里可以看到sd卡的新的分区表:


linux如何制作SD卡镜像 sd卡装linux_启动文件_09



运行一次mdev,使得系统更新设备节点:


linux如何制作SD卡镜像 sd卡装linux_启动文件_10



根据之前的规划,将p1格式化为fat,p2与p3格式化为ext3格式:


linux如何制作SD卡镜像 sd卡装linux_sd卡_11



在虚拟机的tftp目录下准备好boot需要的文件:


linux如何制作SD卡镜像 sd卡装linux_sd卡_12



在开发板上将p1以fat格式mount到系统,然后通过tftp从虚拟机上下载启动文件,虚拟机的ip为192.168.1.102:


linux如何制作SD卡镜像 sd卡装linux_启动文件_13



重头戏开始,将p2分区以ext2格式mount到系统,然后通过nfs,将虚拟机上的rootfs复制到p2分区,也就是在p2分区上构建了一套rootfs:


linux如何制作SD卡镜像 sd卡装linux_sd卡_14




完成之后使用reboot命令重启 



由于默认情况下,9x5的mci0的启动优先级高于nand,所以即使nand上有linux,系统还是从sd卡先启动,看看启动信息:


linux如何制作SD卡镜像 sd卡装linux_sd卡_15


注意fatls呈现出来的位于fat分区上的启动文件


使用命令将kernel uImage加载到内存,并设置bootargs,指明rootfs位于sd卡的分区p2:





linux如何制作SD卡镜像 sd卡装linux_启动文件_16




系统正常从sd卡启动,并mount上文件系统:


linux如何制作SD卡镜像 sd卡装linux_sd卡_17



目前p3分区仍然空闲,可以mount到系统加以使用,这里就不详细说了,看下读取速度测试:


linux如何制作SD卡镜像 sd卡装linux_linux如何制作SD卡镜像_18



可以看到,纯使用sd卡,可以方便地在9x5上部署linux系统,而且容量的提升及其容易,fat分区的启动文件也很容易更换,适合对振动要求一般,但是对容量要求高,又需要经常更换的场合。


将sd卡放到windows pc上,可以看到,只能识别第一个分区及其文件,启动文件也可以在windows上进行更换:


linux如何制作SD卡镜像 sd卡装linux_开发板_19




linux如何制作SD卡镜像 sd卡装linux_linux如何制作SD卡镜像_20