linux-2.6.22.6内核启动分析之编译体验
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-2.6.22.6内核启动分析之编译体验的更多相关文章
- linux-2.6.22.6内核启动分析之Makefile文件
学习目标 分析Makefile文件,了解内核中的哪些文件被编译,如何被编译,连接时顺序如何确定! Linux内核源码中包含很多的Makefile文件,这些Makefile文件又包含其它的一些文件,比如 ...
- linux-2.6.22.6内核启动分析之配置
配置过程最终结果是生成.config文件,我们想要对配置的目的有很清楚的了解,必须先对.config文件进行分析.通过cd命令切换到linux-2.6.22.6内核目录,输入vi .config 可以 ...
- linux-2.6.22.6内核启动分析之head.S引导段代码
学习目标: 了解arch/arm/kernel/head.S作为内核启动的第一个文件所实现的功能! 前面通过对内核Makefile的分析,可以知道arch/arm/kernel/head.S是内核启动 ...
- 第3阶段——内核启动分析之start_kernel初始化函数(5)
内核启动分析之start_kernel初始化函数(init/main.c) stext函数启动内核后,就开始进入start_kernel初始化各个函数, 下面只是浅尝辄止的描述一下函数的功能,很多函数 ...
- mkimage工具 加载地址和入口地址 内核启动分析
第三章第二节 mkimage工具制作Linux内核的压缩镜像文件,需要使用到mkimage工具.mkimage这个工具位于u-boot-2013. 04中的tools目录下,它可以用来制作不压缩或者压 ...
- Linux内核启动分析过程-《Linux内核分析》week3作业
环境搭建 环境的搭建参考课件,主要就是编译内核源码和生成镜像 start_kernel 从start_kernel开始,才真正进入了Linux内核的启动过程.我们可以把start_kernel看做平时 ...
- Linux内核启动分析
张超<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 我的代码可见https://www.shiyanlo ...
- linux内核启动分析(2)
-----以下内容为从网络上整理所得------ 主要介绍kernel_init线程(函数),这个线程在rest_init函数中被创建,kernel_init函数将完成设备驱动程序的初始化,并调用in ...
- Linux内核启动分析笔记
一.驱动加载 1.驱动加载调用关系 start_kernel //init/main.c rest_init //最后执行它 kernel_init //使用kernel_thread创建一个进程执行 ...
随机推荐
- [翻译] CNPGridMenu
CNPGridMenu CNPGridMenu is a Mailbox style grid menu with a blurred background for iOS 7 & iOS 8 ...
- UDF/UDAF开发总结
参考文章: https://www.cnblogs.com/itxuexiwang/p/6264547.html https://www.cnblogs.com/eRrsr/p/6096989.htm ...
- 如何将本地项目上传至GitHub
首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下载地址,下载后一路直接安装即可: https://gi ...
- 美团2018年CodeM大赛-初赛B轮 B 配送(最短路)
美团2018年CodeM大赛-初赛B轮 B 配送 题意 题解 对于每个任务,只要从上个任务的终点出发即可. 时间.地点很少,可以算出每个地点-时间的最小花费. 以题目描述的起点终点起始结束时间建图,很 ...
- P2564 [SCOI2009]生日礼物
题目背景 四川2009NOI省选 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可 ...
- xss实现获取内网ip
前提得浏览器支持webRTC,测试的时候google浏览器测试成功,火狐浏览器不支持webRTC, 再在xss平台直接复制如下js代码: function form_ip(ip,port){ var ...
- 5、Spring Cloud-声明式调用 Feign(下)
5.5.在Feign中使用HttpClient和OkhHttp Feign 中.Client 是一个非常重要的组件, Feign 最终发送 Request 请求以及接收 Response响应都是由 C ...
- valgrind massif内存分析[转]
valgrind检查内存泄露 #valgrind ./程序 内存泄漏问题,我们有memcheck工具来检查.很爽.但是有时候memcheck工具查了没泄漏,程序一跑,内存还是狂飙.这又是什么问题. ...
- [转]开源实时视频码流分析软件:VideoEye
原文太长了,就直接贴上链接,以便大家学习. 引文链接:开源实时视频码流分析软件:VideoEye
- LWIP2.0.2 & FreeRTOS & MQTT 客户端的 使用
1.参考链接 :http://www.nongnu.org/lwip/2_0_x/group__mqtt.html 2.首先移植好lwip,然后添加lwip-2.0.2\src\apps\mqtt ...