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. 模型层(template)

    错误之forbbiddon csrf_token:这个标签用于跨站请求伪造保护 提交数据的时候就会做安全机制,当你点击提交的时候会出现一个forbbiddon 的错误,就是用setting配置里的sc ...

  2. 初进MFC的世界,太奇妙。第六次作业----未完待续

    又一次的迁徙.我希望能够早些抵达. 第六次作业-未完待续!图形界面,计算器文件 本次的作业是给自己的计算器加一个可视化的窗口,我开始也是很激动和憧憬的,看了很多的界面库,发现并没有想象的那么简单,因为 ...

  3. caanimationgroup与CATransaction的区别

    动画的组合: caanimationgroup:同一个layer: CATransaction:不同layer: In Core Animation, transactions are a way t ...

  4. 笔试面试之C++

    7 类B是类A的公有派生类, 类A和类B中都定义了虚函数func(), p 是一个指向类A对象的指针,则p->A::func()将() A 调用类A中的函数 B 调用类B中的函数 C 根据p所指 ...

  5. 【Vue】安装(NPM 方法)

    [Vue2.0 新手完全填坑攻略——从环境搭建到发布]http://www.jianshu.com/p/5ba253651c3b 1.在用 Vue.js 构建大型应用时推荐使用 NPM 安装 2.Vu ...

  6. oracle数据库之用户管理

    转载 Oracle创建用户.角色.授权.建表   一.oracle数据库的权限系统分为系统权限与对象权限: 系统权限( database system privilege )可以让用户执行特定的命令集 ...

  7. Windows命令行使用总结(持续更新)

    1. 根据端口号查找进程: netstat -ano | findstr "port" 2. 获取任务列表: tasklist 3. 如果我们想要结束某个程序的所有进程的话,比如, ...

  8. python 装饰器 传递参数简单案例

    def debug(func): def wrapper(*args, **kwargs): # 指定宇宙无敌参数 print "[DEBUG]: enter {}()".form ...

  9. Segmentation fault (core dumped) 错误的一种解决场景

    错误类型 Segmentation fault (core dumped) 产生原因 Segmentation fault 段错误. Core Dump 核心转储(是操作系统在进程收到某些信号而终止运 ...

  10. CCF认证201809-2买菜

    问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装n次车.具体的,对于小H来说有n个不相交的时间段 ...