基于Ubuntu制作内核镜像

基于Ubuntu制作内核镜像

准备工作:

1.      完整的linux内核(本次试验以linux2.6.35为例)

2.      PC机

 

操作步骤:

1.      首先,将linux内核拷贝到系统的/usr/src目录下。

在这个拷贝的过程中有一点需要注意,下载的linux内核不能在windows下进行解压拷贝。Windows和linux对于文件的命名规则不同,在linux下,文件名是区分大小写的,名字相同大小写不同完全可以,但是在windows下,这种命名方式不行,如果在windows下解压缩,windows会自动删除文件名相同的文件中的一个。

2.      修改根目录下的Makefile文件,

修改如下:export KBUILD_BUILDHOST := $(SUBARCH)

                     ARCH                  ?= $(SUBARCH)

                     CROSS_COMPILE         ?=

3.      将系统目录下的Kconfig拷贝到Linux2.6.35内核目录下

4.      执行:                 makeclean

 Make menuconfig (注:参见文档linux修改kernel支持xr17d158方法-3)

                                      Make bzImage

                   执行完到这一步,可能出现一个错误:

                            Error: gcc : 错误:elf_i386 : 没有那个文件或目录

                            Reason: PC机上安装的gcc 编译器不支持linker-style架构

Solution : 1, 修改 ./arch/x86/vdso/Makefile 中,找到VDSO_LDFLAGS_vdso.lds= -m elf_x86_64  –WL , ***

将“-melf_x86_64”替换为“-m 64 ”

2, 找到VDSO_LDFLAGS_vdso32.lds = -m elf_x86_i386  –WL ,***

把“-melf_x86_i386”替换为“-m32”

5.      执行make bzImage

成功则显示: Root device is(8,7)

                             Setup is 13532bytes (padded to 13824 bytes)

                             System is 3455kb

                             CRC 3fa36e81

                             Kernel :arch/x86/boot/bzImage is ready (#1)

6.      执行make modules

可能出现的错误:

           Error : Infile include from driver /net/igbvf/ethtool.c : 36: 0 :

driver/net/igbvf/igbvf.h : 在文件作用域:

driver/net/igbvf/igbvf.h : 129 : 15 : error : 重复的成员’page’

Reason : 错误是由于gcc版本与内核版本冲突,首先建议更换内核,目前,我们修改内核代码以适应当前的编译器。

Solution :/drivers/net/igbvf/igbvf.h : 129 : 15 : 代码为:”struct page*page”和line124中有相同的定义,”struct page *page“,将line129中的定义改为”struct page *pagep”。

7.      重新执行make modules

8.      执行make modules_install

9.      执行make install

 

注:在执行make modules 的时候如果出现以下错误:

         1,Make[1] : ***没有规则可以创建”***/***.o”需要的目标”***/***.c”,停止。

         2,In file include from**/**/**.c : ** : ** :

Include/**/**/**.h: 在文件作用域 :include/**/**/**.h: ** : ** : 致命错误,linux/**/**.h : 没有这个文件或目录。

 

Reason : 由于windows 和linux 下解压缩的过程中的文件命名规则不同,在windows下可能会删除名字一样大小写不一样的文件,而linux下这种文件却是可以共存的。故可能是因为内核在windows下解压缩,造成文件的丢失。

 

Solution : 修改指定目录下的Makefile文件,将出现错误的文件所对应的Makefile配置代码注释掉。

 

Solu-Web : http://www.cnblogs.com/crazywangzx/p/3505289.html

                    http://loveboykan.blog.163.com/blog/static/182699468201211101659849/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值