嵌入式系统布局 -- firmware for single spi chip

嵌入式开发涉及硬件和软件两部分,对于嵌入式系统的软件,通常是固话在SoC芯片上的,

为了系统的稳定性和资源的最优化使用,软件系统的布局也是一个重要的方面,这里简要

介绍本人开发的一款嵌入式产品其系统的布局。

1、系统布局

系统的整体包含常见的几块内容,bootloader/kernel/rootfs/app/data:

bootloader使用的是U-BOOT,根据最终编出来的各个模块的镜像大小以及硬件MEM

(16MB SPI),将系统的布局划分如下:

在这里划分出来了两个APP分区,主要是实现系统的ping-pong boot,具体实现见另一

篇博文。同时在系统中划分出来一个很小的data分区,该分区主要用来保存user的配置

文件,防止系统断电后用户重新配置APP,而且可以在系统升级的情况下,保存user之前

的配置。

2、具体实现

分别编译U-BOOT,Kernel,生成u-boot.bin和uImage镜像文件,再用mkfs.jffs2生

成jffs2 rootfs以及APP1,APP2,data,之后用镜像整合工具把这些镜像整合。

生成好镜像之后,就可以吧镜像通过tftp等方式load到内存中,并通过u-boot中对应的命

令对image进行解析,并将各个image分别烧录到SPI Flash中。

为了实现kernel的boot,需要bootloader kernel传递根文件系统信息,在u-boot中,

传递的参数如下所示:

CONFIG_BOOTARGS "mem=64M mac=12:23:56:78:00:00 noinitrd 

root=/dev/mtdblock2 rw rootfstype=jffs2 console=ttyS0,115200 

init=/linuxrc ip=192.168.6.87:192.168.6.61:192.168.6.1:255.255.255.0::eth0:off"

通过root=/dev/mtdblock2,告知kernel根文件系统所在分区;同时在kernel中要

有对应的分区划分:

static struct mtd_partition gc_mx25_partitions[] = {
#ifdef CONFIG_GCSOC010_SPIBOOT_VERSION
       [0] = {
                .name           = "uboot(+spiboot)",
                .offset         = 0,
                .size           = 256*SZ_1K
        },
       [1] = {
                .name           = "Kernel",
                .offset         = 256*SZ_1K,   
                .size           = (3*SZ_1M)
        },
       [2] = {
                .name           = "jfss2",
                .offset         = (3*SZ_1M+320*SZ_1K),
                .size           = 8*SZ_1M
        },
       [3] = {
                .name           = "app1",
                .offset         = 12*SZ_1M,
                .size           = 1*SZ_1M
       },
       [4] = {
                .name           = "app2",
                .offset         = 13*SZ_1M,
                .size           = 1*SZ_1M
       },
       [5] = {
                .name           = "data",
                .offset         = 14*SZ_1M,
                .size           = 2*SZ_1M
       }
};

文件系统等的生成使用命令:

mkfs.jffs2 -r rootfs/ -o jffs2.img -s 0x1000 -e 0x10000 --pad=0xA00000                                                               
sumtool -e 0x10000 -p -i jffs2.img -o jffs2n.im
g

sumtool之后可以加速系统的启动。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值