基于Linux内核的应用程序构造(三)——内核安装

来源:互联网 发布:樱井知香2010年番号 编辑:程序博客网 时间:2024/06/11 03:27

依据oplonu产品为例,着重解析编译过程

Kernel Version:linux2.6.21.5

SDK:https://github.com/DavionKnight/oplonu


if make f23pv1e

then
    if make
    then

        if make install

接下来要进行的就是install过程

该过程oplonu/Makefile.rules,由于该部分代码比较集中,全部贴出如下:

1.重建根文件系统,并将opconn.img复制到root/bin/下

2.编译内核,但是不太明白为什么要判断if [ ! -f $(KERNEL_DIR)/linux-2.6.21.5/scripts/mod/modpost ];

难道只是为了判断内核是否编译过?(在这个地方并没有编译内核)

3.安装busybox,编译各模块,并复制到/root/modules/下

4.删除不用内容,执行mklzma.sh脚本

这个地方才是真正开始编译内核

make -j1 CROSS_COMPILE="mips-linux-uclibc-" ARCH="mips" CONFIG_SHELL="/bin/bash" CC="mips-linux-uclibc-gcc" V=1

-j1上层make 程序为其他make进程传递参数(详见gnu makefile手册)

LX = ../vmlinux
mips_4KC-objcopy --gap-fill=0xff -O binary $(LX) piggy

lzma e piggy piggy.lzma

以上将vmlinux (--gap-fill=0xff )用0xff来填充section之间的空隙。

生成piggy并压缩

uImageLzma: piggy.lzma
    @echo $(VERSION)
    @echo "make uImage using file $(LX) ... "
    @echo $(BUILD_TIME)
    @echo "svn=" $(SVN_VERSION)
    @echo "cpuid=" $(SOCID)
    ./mkimage-new -i $(SOCID) -r $(SVN_VERSION) -A mips -O linux -T kernel -C lzma -a 80041000 -e \
    0x$(shell grep kernel_entry $(LX_MAP) | awk '{ printf "%s", $$1 }') \
    -n 'MIPS Linux-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)' \
    -d piggy.lzma $@

这一部分通过piiggy.lzma通过添加类型/版本/内存首地址,从system.map中查找start_kernel的首地址

-a address 80041000当boot load内核到内存时的地址

生成最后的uImage uImageLzma














































0 0
原创粉丝点击