Chinaunix首页 | 论坛 | 博客
  • 博客访问: 299567
  • 博文数量: 76
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 715
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-20 20:38
文章分类
文章存档

2016年(20)

2015年(56)

分类: 嵌入式

2015-05-22 17:15:36


从新移植linux内核

15年4月23日08:37:24

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


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

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_后面可以写数字,表示忽略几个参数。

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是内核映象,大概4MzImage为内核映象的压缩文件,uImagezImage+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/sharm-linux-gcc:not found

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

make:[prepare0]错误2“


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


这时,看到网上一片文章讲的,当在当前用户模式下输入“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,不过暂时不知的注释掉这一行对后面有没有影响。

阅读(1873) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~