待解决问题?

1,Linux内核在启动过程中会寻找并加载根文件系统,加载成功则进入Linux Shell,运行用户程序。如果找不到合适的根文件系统,则会出现Kernel Panic错误并停止。

那么问题来了,如何寻找和加载根文件系统?

2,嵌入式Linux Bootloader的基本功能是:根据设定的参数直接引导操作系统启动和下载程序。在程序下载模式下,Bootloader能够完成内核、根文件系统的固化和更新,甚至实现Bootloader的自我更新。

那么问题来了?我们可以通过哪些方式来完成文件的下载和固化?串口?以太网?USB接口?SD接口?

3,在产品开发过程中,Bootloader的扩展功能,如硬件检测、文件系统支持和文件浏览等,对于硬件的调试是非常便利的。

那么问题来了,该怎么开发一个完整易用的Bootloader?

4,Booloader的特性和功能有哪些?

(1)可靠性和稳定性都较好

(2)支持命令行,都自己的Shell

(3)支持外设丰富,如:串口、以太网、SDRAM、FALSH、LCD、NVRAM、EEPROM、RTC、键盘等

(4)有自己的文档

(5)网络技术支持方便

(6)系统引导

(7)支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统

(8)支持NFS挂载、从FLASH中引导压缩或非压缩系统内核

(9)CRC校验,可校验FLASH中内核、RAMDISK镜像文件是否完好

(10)提供各种外设的驱动,如串口、FLASH、以太网、LCD、EEPROM、键盘、USB、PCMCIA、RTC等

(11)上电自检能:可自动检测SDRAM、FLASH大小,也能检测外设故障

(12)支持XIP内核引导

(13)操作系统接口功能强大:可灵活谁设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布

5,Linux产品:

(1)参考评估板,需要考虑:功能软件、引脚复用、完善评估板的驱动和修复BUG。

(2)Bootloader、内核、文件系统要贴合、匹配硬件。

(3)NAND直接启动:有位反转问题。当我们对NAND进行分区域保护时,会对Bootloader、内核、文件系统等进行分,并对各不同分区设置不同的mask_flag,从而实现对该MTD分区的属性设置,如只读等,防止误操作破坏分区。采用双备份方式。

6,操作系统,一定要bootloader吗?

不一定。如果系统支持内核XIP,就可以不需要bootloader。

7,快速启动

(1)精简Bootloader。开发时用一个完整的bootloader,发布产品时用一个精简bootloader。

开发用bootloader:包含很多的功能和命令,例如以太网、USB、SD卡等自检功能。设置uboot等待时间如3秒。

发布用bootloader:删除自检用功能和命令。关于等待时间,可将等待时间单位设置为“百毫秒”或“十毫米”。(<common/main.c>的abortboot(int bootdelay)函数)。重新上电后,提前按着键盘按键不松开,直到进入命令行。

(2)精简内核:要注意Bootloader搬运内核的时间,内核自解压后以及运行的时间。裁剪冗余的驱动和协议功能模块,去掉驱动模块的调试支持功能,在Kernel Hacking(Show timing information on prinkd)中关闭各种系统调试功能,将内核必备功能,如串口、NAND驱动、系统RTC等静态编译在内核中,对其他模块编译为内核模块,在进入系统后再加载。

(3)精简根文件系统:要注意根文件系统镜像的格式,根文件系统本身体积的大小,init程序以及根文件系统所启动的服务和程序的多少。

posted @ 2019-01-01 17:49  Stephen1120  阅读(215)  评论(0)    收藏  举报