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内核启动分析之编译体验的更多相关文章

  1. linux-2.6.22.6内核启动分析之Makefile文件

    学习目标 分析Makefile文件,了解内核中的哪些文件被编译,如何被编译,连接时顺序如何确定! Linux内核源码中包含很多的Makefile文件,这些Makefile文件又包含其它的一些文件,比如 ...

  2. linux-2.6.22.6内核启动分析之配置

    配置过程最终结果是生成.config文件,我们想要对配置的目的有很清楚的了解,必须先对.config文件进行分析.通过cd命令切换到linux-2.6.22.6内核目录,输入vi .config 可以 ...

  3. linux-2.6.22.6内核启动分析之head.S引导段代码

    学习目标: 了解arch/arm/kernel/head.S作为内核启动的第一个文件所实现的功能! 前面通过对内核Makefile的分析,可以知道arch/arm/kernel/head.S是内核启动 ...

  4. 第3阶段——内核启动分析之start_kernel初始化函数(5)

    内核启动分析之start_kernel初始化函数(init/main.c) stext函数启动内核后,就开始进入start_kernel初始化各个函数, 下面只是浅尝辄止的描述一下函数的功能,很多函数 ...

  5. mkimage工具 加载地址和入口地址 内核启动分析

    第三章第二节 mkimage工具制作Linux内核的压缩镜像文件,需要使用到mkimage工具.mkimage这个工具位于u-boot-2013. 04中的tools目录下,它可以用来制作不压缩或者压 ...

  6. Linux内核启动分析过程-《Linux内核分析》week3作业

    环境搭建 环境的搭建参考课件,主要就是编译内核源码和生成镜像 start_kernel 从start_kernel开始,才真正进入了Linux内核的启动过程.我们可以把start_kernel看做平时 ...

  7. Linux内核启动分析

    张超<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 我的代码可见https://www.shiyanlo ...

  8. linux内核启动分析(2)

    -----以下内容为从网络上整理所得------ 主要介绍kernel_init线程(函数),这个线程在rest_init函数中被创建,kernel_init函数将完成设备驱动程序的初始化,并调用in ...

  9. Linux内核启动分析笔记

    一.驱动加载 1.驱动加载调用关系 start_kernel //init/main.c rest_init //最后执行它 kernel_init //使用kernel_thread创建一个进程执行 ...

随机推荐

  1. ASP.NET Page执行顺序如:OnPreInit()、OnInit()……

    using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security ...

  2. 基于双下划线的跨表查询 (join查询)

    因为你的数据库中的查询就是重点  那么你的django提供的orm也是查询语句最重点 ,也提供的查询方法比较的多,下面我们学习下类似于MYSQL的连表(join)查询 Django 还提供了一种直观而 ...

  3. 多变量线性回归 matlab

    %multivariate_linear_regression data=load('data.txt'); x=data(:,1:2); y=data(:,3); m=length(x(:,1)); ...

  4. 整合VIM和Graphviz,并且使用本办法实现实时预览

    在编程或是整理知识的时候一直苦于没有一款可以帮助理清思路的工具. 在网上苦寻良久,终于找到了一款可心可意的小软件 —— Graphviz. 折腾了一番,终于可以凑合着用了. 现将折腾的成果记录于此以作 ...

  5. September 01st 2017 Week 35th Friday

    Each trauma, is another kind of maturity. 每一个创伤,都是另一种成熟. Sometimes the trauma may be too severe to h ...

  6. December 21st 2016 Week 52nd Wednesday

    Keep conscience clear, then never fear. 问心无愧,永不畏惧. I find it is very difficult for me to keep consci ...

  7. Salesforce和SAP Netweaver里数据库表的元数据设计

    从Salesforce官网可以了解到Salesforce的force.com平台里数据库表的设计:https://developer.salesforce.com/page/Multi_Tenant_ ...

  8. ECharts 图表设置标记的大小 symbolSize 和获取标记的值

    ECharts 是百度出品,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等) ...

  9. Git版本控制 备忘录

    安装Git: 在Linux上安装Git: sudo apt-get install git 在windows上安装Git: 从https://git-for-windows.github.io下载,然 ...

  10. tcp 面向连接

    TCP通信时通过三次握手建立连接,这个连接不是虚拟链路,每个IP报文是要寻址,通过路由转发的 那建立的这个连接能够起什么作用啊,感觉建立这个连接和不建立这个连接的效果是一样的啊!因为除去可靠性等机制, ...