内核启动解压过程
来源:互联网 发布:java 子类的构造器 编辑:程序博客网 时间:2024/06/03 07:35
uboot:
cmd_bootm.c
do_bootm
printf(Uncompressing Kernel Image ... OK);
bootm.c
do_bootm_linux
printf(Starting kernel ...);
kernel:
boot/compress/misc.c
decompress_kernel
printf(Uncompressing Linux............. done, booting the kernel.);
内核生成一个没有经过处理的vmlinux文件
GZIP 压缩
1>arm-linux-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin //转成二进制格式
2>gzip -9 linux.bin //压缩
3>mkimage -A arm -O linux -T kernel -C gzip -a 0x30008000 -e 0x000800 -n "Linux Kernel Image" -d linux.bin.gz -uImage //构造头部信息
LZMA 压缩
1>arm-linux-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin
2>lzma -9 -f -S .lzma linux.bin
3>mkimage -A arm -O linux -T kernel -C lzma -a 0x30008000 -e 0x000800 -n "Linux Kernel Image" -d linux.bin.lzma -uImage
如果放到UBOOT里面解压 uboot do_bootm 函数会解压 GZIP 或LZMA
如果放到kernel里面解压 decompress_kernel函数会处理,前提是把内核$ARCH/boot/compressed/下面的 head.S misc.c打包到compress/vmlinux里面去
/compressed/head.S
bl decompress_kernel
/compressed/piggy.S
.incbin "arch/arm/boot/compressed/piggy.gz"
/compressed/misc.c
decompress_kernel
decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p,int arch_id)
{
putstr("Uncompressing Linux...");
gunzip();
putstr(" done, booting the kernel.\n");
return output_ptr;
}
arm-none-linux-gnueabi-gcc -c -o arch/arm/boot/compressed/head.o arch/arm/boot/compressed/head.S
(cat arch/arm/boot/compressed/../Image | gzip -f -9 > arch/arm/boot/compressed/piggy.gz) || (rm -f arch/arm/boot/compressed/piggy.gz ; false)
arm-none-linux-gnueabi-gcc -c -o arch/arm/boot/compressed/piggy.o arch/arm/boot/compressed/piggy.S // include compressed/piggy.gz"
arm-none-linux-gnueabi-gcc -c -o arch/arm/boot/compressed/misc.o arch/arm/boot/compressed/misc.c
arm-none-linux-gnueabi-ld -EL --defsym zreladdr=0x20008000 --defsym params_phys=0x20000100 -p --no-undefined
-X ../lib/gcc/arm-none-linux-gnueabi/4.3.2/libgcc.a
-T arch/arm/boot/compressed/vmlinux.lds
arch/arm/boot/compressed/head.o
arch/arm/boot/compressed/piggy.o
arch/arm/boot/compressed/misc.o
-o arch/arm/boot/compressed/vmlinux
- 内核启动解压过程
- linux内核启动内核解压过程分析
- linux内核启动内核解压过程分析
- linux内核启动内核解压过程分析
- linux内核启动解压过程分析
- linux内核启动内核解压过程分析-全
- linux内核启动过程——zImage自解压
- Linux 内核启动过程分析----zImage自解压
- Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)
- Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)
- Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)
- Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)
- Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)
- Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)
- arm-linux解压内核过程
- 学习笔记 --- LINUX内核启动第二阶段分析(不考虑自解压过程)
- CE6内核启动过程
- CE6内核启动过程
- hdu 3792 Twin Prime Conjecture n之内的孪生素数个数
- machine learning 书单
- Sublime安装及使用SVN
- Ramdisk源代码详解
- Code Debug and Inject
- 内核启动解压过程
- UI Design Basic: 0.1 ios app Anatom
- jquery鼠标移入移出变色和单击隐藏出现事件
- ABI、OABI和EABI
- 人群中,你是不是还有你喜欢的人~
- Cocos2dx 3.0 过渡篇(十八) Cocos2d-x 3.0rc,又一种创建项目方式 .
- UVa 11624 - Fire!
- 跟机器人滚床单?你愿意吗?
- Spring的任务调度服务实例讲解