在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官方说明https://www.at91.com/linux4sam/bin/view/Linux4SAM/SDCardBootNotice了解原理

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

插上SD卡,系统提示:

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

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

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

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

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

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

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

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

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

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

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

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

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

完成之后使用reboot命令重启

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

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

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

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

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

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

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