手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

linux-2.6.22.6内核启动分析之内核编译体验

[日期:2018-07-07] 来源:Linux社区  作者:坦然~ [字体: ]

1 解压缩、打补丁操作

1.1 打开Ubuntu,通过FTP将Windows相应文件夹下的linux-2.6.22.6.tar.bz2和补丁文件linux-2.6.22.6-jz2440.patch上传到服务器/work/hardware目录下

1.2 输入cd /work/hardware 进入压缩包所在目录,再使用 tar xjf linux-2.6.22.6tar.bz2 命令对linux内核源码压缩包进行解压缩

1.3 输入cd /linux-2.6.22.6 进入解压缩后内核的源码目录,执行 patch -p1 < ../linux-2.6.22.6-jz2440.patch 命令对内核进行打补丁操作

2 内核的配置(3种方法)

在进行介绍三种内核配置方法之前先说明在我电脑编译环境下,执行meke menuconfig命令遇到的问题。我使用的虚拟机版本是Ubuntu-16.04.2,GNU Make的版本是4.1(在linux环境下输入make -v可以查看GNU Make版本信息),遇到编译问题如下图:

网上搜索找到了报错原因,因为所编译linux-2.6.22.6内核版本比较旧,而我使用的GNU Make版本较新,新版本可能对于make的规则可能做出了一些修改,所以出现了上面的错误提示,因此需要对内核顶层的Makefile文件做出如下修改:

linux-2.6.22.6内核根目录下,输入 vi Makefile 命令,输入 416gg 快速定位到416行,看到如下代码:

这里需要修改为

然后是提示的1449行

这里需要修改为

完成后继续执行 make menuconfig 命令即可看到配置顺利进行。

2.1 直接执行 make menuconfig 命令,从头到尾每一项都自己去配置

执行make menuconfig命令后,里面有成千上万种配置选项,需要一个一个去配置,显然操作十分复杂。

2.2 使用默认配置,在默认配置基础上进行修改

先用cd命令切换到linux-2.3.22.6内核存放根目录下,再进行默认配置文件的查找。这里我们可以通过 find -name "*defconfig*" 命令实现查找操作,这条命令查找所有带"defconfig"字符串的文件夹路径。查找结果如下,可以看到带"def_config"字符串的配置文件都在arch架构目录下存放。

我们的开发板使用的芯片属于arm架构,所以通过cd ./arch/arm/configs 进入configs目录寻找和开发板使用芯片相似的配置文件。进入目标文件夹后使用 ls 命令来列出该文价夹下包含的配置文件,该目录下包含的配置文件如下图所示:

通过上面查找结果可以看到,与2440相似的配置只有s3c2410_defconfig文件了,这里我们先返回存放linux-2.6.22.6内核的根目录,然后运行 make s3c2410_defconfig 命令来进行配置,配置结果如下图所示:

配置完后打印结果"configuration written to .config",表示所有的配置信息都写入到了.config文件中,执行make menuconfig 命令就是回去读取.config文件内容。

2.3 使用厂家提供的配置文件

jz2440出厂时,厂家提供了相应的配置文件config_ok,在打补丁时已经存放到内核的目录下。由上面的介绍,我们知道执行make menuconfig 命令就是去读取.config内容,若想使用厂家提供配置文件,只需要把厂家提供配置文件内容复制到.config文件中。使用cd命令切换到linux-2.3.22.6内核存放目录下,使用 cp config_ok .config 命令就能把实现前面所叙述操作。

2.4 执行make menuconfig 配置菜单

 

菜单操作命令如下表所述:

Arrow keys navigate the menu 键盘上下键可以控制菜单上下移动,左右键可以控制水平三个菜单移动
<Enter> selects submenus ---> 按下键盘Enter(回车键)可以进入该项菜单子目录
Highlighted letters are hotkeys 开头为粗体字母代表是该项菜单热键,在键盘上按下相应字母,光标定位到该处
Pressing <Y> includes Y键,编译到内核中
<N> excludes N键,不编译到内核中
<M> modularizes features M键,进行模块化
Press <Esc><Esc> to exit Esc键退出
<?> for Help ?键帮助
</> for Search /键收索
Legend: 显示
[*] built-in 已经内置到内核中
[  ] excluded 不编译到内核中
<M> module 已经模块化
< > module capable 表示该选项可以模块化

 

3 编译

3.1 输入 make 命令直接进行编译

3.2 输入 make uImage命令生成uImage形式内核文件,uImage文件包含头部和真正内核部分,可以烧写进去让uboot直接使用。编译uImage文件时必须把编译uboot得到的mkimage工具复制到/user/bin目录中。

3.3 运行uboot,按下命令键k可以通过dnw软件把uImage文件传给uboot,uboot再清除flash,把uImage文件写入到flash中。

4 启动内核

4.1 通过uboot烧写uImage形式内核文件完成后,可以通过菜单键中b键重启内核,注意flash中存储有完整文件系统时内核才能启动成功,否则内核启动会卡在某一位置。

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址https://www.linuxidc.com/Linux/2018-07/153064.htm

linux
相关资讯       Linux内核编译 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款