Flash中启动Linux的方法
来源:互联网 发布:软件设计师视频下载 编辑:程序博客网 时间:2024/05/22 11:45
在测试过程中,可以通过at91rm9200内置的bootloader程序加载loader程序以及u-boot程序,然后通过强大的u-boot功能可以通过网络或者串口加载启动所需的linux kernel以及文件系统。当程序调试成功之后,需要将程序固化到Flash存储介质中,或者也可以采用网络启动的方法。最终不管采用本地Flash启动还是远程网络启动,其设计思想是保持一致的,下面对本地Flash(通常指Nor Flash)启动方法进行说明。
提起本地Flash启动,实际上存在很多种方法,如果将Linux程序直接固化到Flash的头部,也是可以启动的,但是Linux程序需要设置好启动命令等参数,需要知道文件系统在什么位置,文件系统的挂载点是什么等参数,这些参数的设置在make menuconfig->boot options中进行设置。当然一个更加通用的方法是u-boot引导操作系统,Linux的启动命令通过环境变量进行设置。
采用u-boot引导Linux首先需要将u-boot程序固化到flash中,通常这也有两种方法,一种是u-boot程序直接固化到flash的头部,系统复位之后直接运行u-boot程序,然后u-boot程序自拷贝到对应的内存位置,提供相应服务;另一种方法是通过boot程序引导u-boot,并且将u-boot程序拷贝到具体内存位置,然后将CPU交给u-boot,提供相应服务。第二种方法可以将u-boot程序进行压缩处理,占用相对较小的Flash存储空间,所以通常都采用第二种方法,即通过boot程序引导u-boot。
u-boot程序有两种工作状态,一种为自动引导模式;一种为用户操作模式。如果用户没有定义bootcmd环境变量,那么直接进入用户操作模式;如果定义了bootcmd,那么u-boot将直接运行bootcmd,但是在运行bootcmd时会等待bootdelay时间,bootdelay也是一个环境变量,由用户设置。说到这里,我们应该知道环境变量的重要性了,u-boot会根据这些环境变量进行操作系统自启动,操作系统的位置参数、文件系统的位置参数、u-boot与操作系统之间的交互参数都可以存储在环境变量中。所以,在自启动模式下,需要设置好u-boot的环境变量,我设置的环境变量参考如下:
baudrate=115200 /* 串口通信的波特率 */
/* Linux的启动命令参数 */
bootargs=root=/dev/ram rw initrd="0x21100000",4M init="/linuxrc" console="ttyS0",115200
/* 文件系统的拷贝命令,从Flash拷贝到内存 */
fs=cp.b 0x10200000 0x21100000 0x2fffff
/* 操作系统的拷贝命令,从Flash拷贝到内存 */
kernel=cp.b 0x10100000 0x21000000 0xfffff
ethaddr=01:02:03:04:05:06
serverip=10.10.21.253
ipaddr=10.10.21.252
/* 启动命令 */
bootcmd=run boot
/* 具体的启动操作 */
boot=run kernel;run fs;bootm 0x21000000
/* 自启动时的延迟参数 */
bootdelay=5
stdin=serial
stdout=serial
stderr=serial
从上述环境变量的定义中,我们知道u-boot启动之后调用run boot命令,run boot命令分为三大步骤:首先run kernel,将Linux kernel从flash中拷贝到内存,当然也可以通过网络tftp到内存;然后run fs,将文件系统从flash中拷贝到内存;最后通过bootm启动linux kernel。从这个地方我们可以看出,通过这种方法不仅可以从Flash中启动Linux,也可以从Nand Flash、网络服务器中启动Linux Kernel,这种方法是通用的。
从Flash中启动Linux,还有一点需要注意,Flash需要进行合理的分区,环境变量中的具体地址与Flash的分区息息相关。下图是我采用的Flash(采用Intel的E28F128芯片)分区方法:
- Flash中启动Linux的方法
- Linux启动过程中跳过MySQL Server启动的方法
- zynq-7000的linux QSPI flash启动
- ZYNQ Linux的QSPI Flash启动
- linux 安装 flash player的方法
- uboot中ramdisk启动linux的两种方法
- 网页中嵌入Flash的方法讨论
- 网页中嵌入Flash的方法讨论
- 在Powerpoint中插入Flash的方法
- FLASH中场景切换的几个方法
- 网页中嵌入Flash的方法
- C# WINFORM中嵌入FLASH的方法
- 网页中嵌入Flash的方法讨论
- 在网页中插入flash的方法
- C# WINFORM中嵌入FLASH的方法
- 在sdram中运行的linux内核和文件系统烧写到flash中的方法
- 在Linux系统中为Firefox安装最新版flash插件的方法
- 从NAND FLASH中启动U-BOOT的设计
- 如何将一个uiview推送到窗口的前面与背后
- PHP 性能分析第三篇: 性能调优实战
- MySql 5.6.20,安装后无法登陆的解决办法
- 深入理解Tagged Pointer
- Java中的享元(flyweight)设计模式
- Flash中启动Linux的方法
- LeetCode 077 Combinations
- 新版福昕阅读器(Foxit Reader)启动速度慢解决办法
- 打开MySQL数据库远程访问的权限
- Show slave status 详解
- timezone 0.4.3
- vim - Run python code in vim editor
- 编码常见问题及解决方式
- mysql批量删除指定后缀名的数据表