嵌入式系统自启动
MTD技术通过把Nand FLash划分成bootloader分区,Linux kernel分区和file system分区来达到自启动的效果。
配置和编译内核
1.配置Linux内核支持MTD分区
make meunconfig ARCH=arm
device drivers-><*>memory techology device(MTD) support->[*]MTD partitioning support->exit->save
2.找到内核分区地址的数据结构
通过找到内核分区结构struct mtd_partition来找到内核分区地址。MINI2440的分区地址在kernel/arch/arm/plat-s3c24xx/common_Embedsky.c中。
grep “mtd_partition”-rn /arch/arm
3.设置内核分区地址
4.编译Linux内核
make uImage ARCH=arm CROSS_COMPILE=arm-linux-
制作yaffs2文件系统
1.制作根文件系统
2.格式化文件系统
mkyaffs2image ./rootfs/ rootfs.img
配置bootloader启动参数
1.找到uboot中bootcmd环境变量,设置启动内核
打开bootloader/include/config/EmbedSky.h,设置CONFIG_BOOTCOMMAND:
nand read 31000000 200000 300000;bootm 31000000
2.设置uboot中bootarg环境变量,设置文件系统
设置CONFIG_BOOTARGS :
noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0
3.编译uboot
make CROSS_COMPILE=arm-linux-
烧写编译好的引导、内核和文件系统到Nand FLash
1.通过usb下载
usbsalve 1 30000000
usbsalve表示通过usb下载,1表示等待连接,30000000表示下载到内存的地址
2.格式化nand flash
nand erase 0 40000
nand erase 200000 300000
nand erase 500000 不指定长度,表示后面全部格式化
3.写入nand flash
nand write 30000000 0 40000
nand write 30000000 200000 300000
nand write.yaffs 30000000 500000 2C29980 写入文件长度可以通过查看文件大小得到