U-boot优化是嵌入式Linux启动优化中最重要的一环.doc
《U-boot优化是嵌入式Linux启动优化中最重要的一环.doc》由会员分享,可在线阅读,更多相关《U-boot优化是嵌入式Linux启动优化中最重要的一环.doc(4页珍藏版)》请在三一文库上搜索。
1、U-boot优化是嵌入式Linux启动优化中最重要的一环既然不能使用新的U-boot,那就优化一点是一点,慢慢干吧。1.去掉启动时的按键等待U-boot 启动的时候出现一个 Hit any key to stop autoboot 不爽,干吗要停上1秒?虽然可以通过设置参数bootdelay=0来关掉这个延时,但这样做了以后就再也进不去U-boot了,更烦。检查代码,发现是在main.c函数int abortboot(int bootdelay)来干这个活的,好吧,改掉它static _inline_ int abortboot(int bootdelay) int abort = 0; ch
2、ar inputkey; if (tstc() inputkey = getc(); abort = (inputkey = u); #ifdef CONFIG_SILENT_CONSOLE if (abort) gd-flags #endif return abort; 这样,就不需要等待了,如果想进入U-boot,就在上电的时候按住u吧,把它改成一个固定的键而不是任意键,因为串口线很容易受到干扰,如果是任意键的话,运行时即使不想进去有时也会进入U-boot的命令行。2.去掉网卡的初始化每次上电,U-boot 都会初始化网卡,其实这根本不需要,把配置文件中#define CONFIG_MII
3、 1去掉,启动时就不会初始化了,需要使用TFTP时,它会自动初始化,又节省了3.4秒的启动时间。3.智能读取OS ImageU-boot 通过nand read 来读取OS Image,通常为了避免麻烦,我们设置的读取长度要比实际OS长度长一些,多读的那部分纯粹是浪费CPU时间,能不能精确判断读取长度呢,当然可以,为了不影响系统的正常功能,扩展一个nand read.os 指令来读取,修改方法如下:在 nand_read_opTIons_t 里面添加一个成员 int is_os_img在函数 int do_nand(cmd_tbl_t * cmdtp, int flag, int argc,
4、char *argv)修改读操作的判断语句,添加 !strcmp(s, .os),然后设置opts.is_os_img = !strcmp(s, .os);大概修改后结果参考第7步代码。 最后,在函数int nand_read_opts(nand_info_t *meminfo, const nand_read_opTIons_t *opts)中修改代码,检测如果opts-is_os_img = 1 并且是第一次读取(2024B)之后,检查度取得结果是否是OS Image,如果是更新需要读取的长度,否则,也不需要再往下读了,直接返回错误就可以了嵌入式Linux启动优化手记2 U-boot优化
5、image_header_t *hdr = (image_header_t *)buffer; if (image_check_magic(hdr) /+ image_get_header_size(); imglen = ossz + + image_get_header_size(); printf(# Find valid OS image, at 0x%x, Size: %d Bytes = %d KBn, (unsigned int)mtdoffset, ossz, ossz/1024); else printf(Invalid OS image at 0x%xn, (unsigne
6、d int)mtdoffset); return -1; 4.去掉OS Image 内存复制过程使用 nand read 读取OS Image 后,U-boot 使用 bootm 指令来启动Linux,检查其实现代码int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv)发现他会把已经读取到内存中的OS Image 在复制到一个指定的位置,OS Image 中的头部参数,这个值一般是固定的,本系统使用的是 0x70008000, 如果在 nand read 时读到的内存位置恰好合适,就可以省掉这些毫秒数了,做法如下:nand
7、 read.os 0x70007FC0 0x100000 0x500000(其中 0x70007FC0 = 0x70008000 - sizeof(sizeof(image_header_t)然后在内存复制的地方(函数do_bootm中),加入修改,跳过内存复制 switch (comp) case IH_COMP_NONE: if (load_start = (ulong)os_hdr) printf ( XIP %s . , type_name); else if (load_start != os_data)/位置不匹配,依然移动,否则就跳过此部 printf ( Loading %s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- boot 优化 嵌入式 Linux 启动 最重要 一环
链接地址:https://www.31doc.com/p-3274381.html