SSD20X平台下,我们使用spi-nand/spi-nor Flash作为启动盘,容量一般为128/256/512MB。如果我们的文件系统大小超出了Flash的容量,将遇到困难,一个场景是我们想要在SSD20X上运行较完备ubuntu系统(后面我们会介绍如何在SSD20X上运行它)。而SD卡的容量足够大(以GB为单位),可以解决Flash容量限制问题。
大概的做法是将uboot和kernel放置在flash中,然后把我们较大的根文件系统放置在SD卡里面。之所以不能把uboot和kernel也放置在SD卡里,是因为SSD20X仅支持从spi-flash启动,让kernel起来后再挂载SD卡中的文件系统,这也意味着,我们可以使用容量更小的Flash,16MB也足够了。
我们需要先准备一个文件系统:
# mkdir sd_rootfs
# cd sd_rootfs
# cp ../project/image/output/rootfs/* ./ -rf
# cp ../project/image/output/customer/ . -rf
# cp ../project/image/output/appconfigs/ . -rf
# cp ../project/image/output/miservice/config/ . -rf
# tar -cvf rootfs.tar ./*
编写一个脚本,实现一键制作完成:
# touch make_sd_rootfs.sh
#!/bin/sh
PWD=$(pwd)
images_dir=${PWD}/images_for_mksdcard
if [ "$1" == "" ]; then
echo "!!!!!!!!!!!! usage: sudo ./make_sd_rootfs.sh /dev/sdb !!!!!!!!!!!"
exit 0
fi
sfdisk ${1}
mkfs.ext3 -F -j ${1}1
mkdir tmp_rootfs
mount -t ext3 ${1}1 tmp_rootfs
tar -xvf ./rootfs.tar -C tmp_rootfs
umount tmp_rootfs
rm -rf tmp_rootfs
# chmod a+x make_sd_rootfs.sh
把SD卡接入到ubuntu中,假设SD卡被识别为/dev/sdb,则执行:
# sudo ./make_sd_rootfs.sh /dev/sdb
等待制作完成。
本地验证:
# sudo mount /dev/sdb1 /mnt
# sudo umount /mnt
制作完成,将SD卡取出并插入入到开发板的SD卡座上。
需要确保kernel支持EXT2/3/4:
# ARCH=arm make menuconfig
File systems --->
<*> The Extended 3 (ext3) filesystem
如果没有支持,需重新配置并更新kernel。
重新设置bootargs,使root指向SD卡中的文件系统所在分区,这样kernel起来后会挂载SD卡中的文件系统,并作为根目录:
SigmaStar # setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p1 rw init=/linuxrc rootwait=1 LX_MEM=0x3f00000 mma_heap=mma_heap_name0,miu=0,sz=0xa00000 mma_memblock_remove=1 highres=off mmap_reserved=fb,miu=0,sz=0x300000,max_start_off=0x3300000,max_end_off=0x3600000 mtdparts=nand0:384k@1280k(IPL0),384k(IPL1),384k(IPL_CUST0),384k(IPL_CUST1),768k(UBOOT0),768k(UBOOT1),256k(ENV),256k(ENV1),0x20000(KEY_CUST),0x60000(LOGO),0x500000(KERNEL),0x500000(RECOVERY),-(UBI)
SigmaStar # saveenv
重新上电后,可以看到SD卡中的文件系统已经被正确挂载了,并且空间足够大。
# mount
# df -h
现在,我们有更多空间来做更多的事情了。
分享
收藏
点赞
在看
前往“发现”-“看一看”浏览“朋友在看”