从新移植linux内核

*****特别要注意的是:移植内核的时候用的交叉编译器与构建跟文件系统的时候用的,一定要是统一个版本的,要不就会出现各种错误!!深有体会啊.......*******************

(一)常规方法,按照韦老师的来做(使用厂家提供的配置文件)

1)解压缩

“cd /work/system”

“tar xjf linux-2.6.22.6.tar.bz2”

2)打补丁

“cd /work/system/linux-2.6.22.6”

“patch -p1 < ../linux2.6.22.6_jz2440.patch”

其中p_后面可以写数字,表示忽略几个参数。

扫描二维码关注公众号,回复: 8892830 查看本文章

3)配置

“cp config_ok .config”

4)编译

“make uImage”

执行的过程中,在最后生成uImage的时候,在命令行最后发现:

**************************************************************

UIMAGE arch/arm/boot/uImage

“mkimage”commond not found – U-boot image will not be built

Image arch/arm/boot/uImage is ready

**************************************************************

即没有mkimage这个工具,直接执行“sudo apt-get install uboot-mkimage”命令,即可安装,再次执行“make uImage”,即可在arch/arm/boot文件夹下面发现生成的uImage。

执行上面的几个步骤就能在/work/system/linux-2.6.22.6/arch/arm/boot文件夹下面生成Image,zImage,uImage。其中Image是内核映象,大概4M,zImage为内核映象的压缩文件,uImage为zImage+64K的头部。

(二)自己使用默认配置,在上面修改的方式移植linux内核

前两步跟上面相同,不再重复写。1) 2)

3)配置

“make s3c2410_defconfig”

“make menuconfig”

提示出错:“curses.h:没有那个文件或目录,编译中断”

百度出来:”ubuntu系统中缺少一个套件ncurses devel“,安装即可,执行

”sudo apt-get install libncurses5-dev“,从新配置成功。

虽然“make menuconfig”的时候,我们什么都不修改,但是这一步不能省去,执行这一步,会生成一部分头文件。

4)编译

“make uImage”

(1)直接执行“make uImage”,提示:

”CHK include/linux/version.h

/bin/sh:1:cannot create …......:Permisson denied

make :***[........]错误2“

一看就是权限不够,于是加上”sudo..........“

(2)执行“sudo make uImage”,结果提示:

”make : arm-linux-gcc:命令没找到

CHK include/linux/version.h

make[1]:include /asm-arm/mach-types.h是最新的

CHK include/.........

CC ….......

/bin/sh:arm-linux-gcc:not found

make[1]:***[......]错误127

make:[prepare0]错误2“

我的arm-linux-gcc 交叉编译链已经安装,输入”arm-“按两下”Tab“键可以出现提示,输入”arm-linux-gcc -v“可以看到版本信息等东西,怎么回事。。。。。。

这时,看到网上一片文章(http://blog.sina.com.cn/s/blog_5ddb672b0100e38w.html),当在当前用户模式下输入“arm-linux-gcc”时,“PATH”是当前模式下的环境变量,而输入“sudo.....”的时候,是在超级用户模式下,此时的环境变量“PATH”里面没有添加交叉编译链,这时候输入“sudo -s”进入超级用户模式,“vim /etc/environment”“export PATH=$PATH........”等,并且“source /etc/environment”,立即生效,输入exit退出后,再次输入“sudo make uImage”。

这时出现同样的错误,我查看环境变量没有错误,我用“sudo -i”进入超级用户模式,查看环境变量发现没有,这时候发现可能“sudo -i”与“sudo -s”可能有区别。

sudo后面可以添加几个参数,-s后面跟命令,直接在当前路径执行;

-i后面可以不跟命令,也可以跟命令,在/root下运行。

(3)继续”sudo -s“ ”make uImage“

提示错误:

”ccl:error:unrecognised debug output level “dwarf2”

make [1]***[usr/initramfs_data.o]错误1

make:***[usr]错误2“

网上查资料,原因是gcc版本不支持 -gdwarf2参数,打开Makefile ,查找后发现

ifdef CONFIG_DEBUG_INFO

CFLAGS += -g

# AFLAGS +=-gdwarf2

endif

用#号注释了上面那行,此时后可以成功编译uImage,不过暂时不知的注释掉这一行对后面有没有影响。

发布了15 篇原创文章 · 获赞 5 · 访问量 2150

猜你喜欢

转载自blog.csdn.net/bojin4564/article/details/104095050