第3阶段——内核启动分析之内核编译试验(1)

目标:

1.给内核打补丁

2.配置

3.编译

4.重启  

1 内核打补丁

1.1 通过FTP将Windows里system目录下linux-2.6.22.6.tar.bz2和linux-2.6.22.6_jz2440.patch文件拷贝到linux里/work/system下

1.2  使用  tar xjf linux-2.6.22.6.tar.bz2 命令解压linux-2.6.22.6.tar.bz2

(tar命令详细介绍入口链接http://www.cnblogs.com/lifexy/p/7009245.html)

1.3  进入linux-2.6.22.6目录下,使用 patch -p1 <../linux-2.6.22.6_jz2440.patch 命令对linux-2.6.22.6文件进行打补丁。

(patch命令详细介绍入口链接http://www.cnblogs.com/lifexy/p/7009706.html)

2 配置(3种配置方法)

2.1直接输入 make menuconfig   命令,从头到尾重新配置菜单 (非常复杂)、

make menuconfig时修改配置项,最终的配置结果会保存在.config文件中,这主要是Kconfig的功能,

再执行make menuconfig时就可以回去读取.config文件。这是内核配置的过程。

2.2通过make xxx_defconfig命令在默认的配置上进行修改,然后再输入make menuconfig配置菜单

(1)  首先找defconfig位置, linux-2.6.22.6目录下,使用 find –name *defconfig 命令查找所有带fconfig名字的文件.

 (find命令详细介绍入口链接http://www.cnblogs.com/lifexy/p/7160677.html)

发现defconfig文件都在arch架构目录下,如下图所示:

(2) 我们的是arm架构,所以 cd  arch/arm/configs 进入configs目录,如下图所示,发现与2440相像的就只有s3c2410_deconfig。

(3)返回到linux-2.6.22.6顶层目录下,通过make s3c2410_defconfig 命令来配置,如下图所示

配置完后可以看出最后出现“configuration written to .config”,表示将所有config配置都写入到.config文件中,

(4)最后执行make menuconfig时就可以回去读取.config文件,不同的.config文件,menuconfig都不同

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

在linux-2.6.22.6目录下,使用cp config_ok  .config将config_ok复制覆盖新的.config隐藏文件(通过 ls -la 命令可以查看.config隐藏文件),

最后执行make menuconfig时就可以回去读取.config文件

2.4  make menuconfig 配置菜单使用说明

使用 make menuconfig 配置菜单后,会出现以下菜单

菜单使用说明: 

Arrow keys navigate the menu. 箭头键导航菜单

<Enter> selects submenus --->.   Enter键选择菜单——>。

Highlighted letters are hotkeys.   粗体的开头字母是热键,例如上图中按B键,跳到Block layer

Pressing <Y> includes,                Y键,编译在内核里运行        

<N> excludes,                              N键,不编译在内核中

<M> modularizes features.          M键,进行模块化

Press <Esc><Esc> to exit,         Esc键退出

<?> forHelp,                               ?键帮助

</> for Search.                           /键搜索

Legend:     显示:

[*] built-in                                    [*]:已经内置在内核中

 [ ] excluded                               [ ]:不编译在内核中

<M> module                              <M>:已经模块化

< > module capable                  < >:表示这选项能被模块化(按下M键有响应)

3 编译(2种配置方法)

3.1 输入 make 命令直接编译

3.2 输入 make uImage 命令生成uImage内核文件(头部uImage+真正的内核),可以直接烧写给uboot直接使用(因为uboot支持的内核需要有头部uImage,  uImage位置在linux中work/system/linux-2.6.22.6/arch/arm/boot)

注意:要想“ make uImage”成功,必须把编译 u-boot 时得到的 mkimage 工具复制到 /usr/bin 目录下去。 mkimage 工具在 u-boot 源码下u-boot-1.1.6/tools 目录里,如下所示:

 3.3将编译出的uImage文件在uboot菜单中输入k键,通过dnw发送uImage文件到uboot进行烧写。

其中k键是对应于cmd_menu.c中menu_shell()函数,代码如下:

case 'k':
{
strcpy(cmd_buf, "usbslave 1 0x30000000; nand erase kernel; nand write.jffs2 0x30000000 kernel $(filesize)");
run_command(cmd_buf, 0);
break;
}

其中实现了:用usb接收发送的数据下载到0x30000000,接着擦除内核分区,然后将0x30000000地址的东西烧写到nand flash内核分区中,方便下次重启使用,filesize接收文件的大小。

在uboot中输入"mtd"可以查看内核分区位置

0:bootloader 0X00040000 0X00000000 0 1:params      0X00020000 0X00040000 0 2:kernel        0X00200000 0X00060000 0 3:root            0X0fda0000 0X00260000 0

4.重启,烧写文件系统

4.1 在uboot菜单中按b按键重启内核,如下图所示:

若显示VFS: Mounted root (nfs filesystem).字段,表示已安装文件系统

 4.2输入”nand erase root”删除内存中root区0x0026000~0x0fffffff文件系统后,重启设备,就会无法启动内核,

所以要想启动内核,必须需要文件系统!!!!!

若编译模块,输入make modules即可,然后模块会编译成.ko文件

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏信安之路

Windows环境下的信息收集

通常我们在渗透测试过程中,遇到的Windows的环境是最多的,然而在拿到一台windows系统权限之后,我们要进行横向或者纵向渗透,这是针对windows的信息...

590
来自专栏依乐祝

mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法

查看win10系统升级日志,果然找到了原因,是因为CVE-2018-0886 的 CredSSP 2018 年 5 月 8 日更新默认设置从“易受攻击”更改为“...

902
来自专栏散尽浮华

Linux下FTP虚拟账号环境部署总结

vsftp的用户有三种类型:匿名用户、系统用户、虚拟用户。 1)匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。 2)本地用户登录:...

2658
来自专栏Laoqi's Linux运维专列

LNMP基础架构实现

架构原理: LAMP=linux+apache+mysql+php LNMP=linux+nginx+mysql+php 一、初入LNMP 当我们讲LAMP的时...

2824
来自专栏云计算教程系列

如何在Ubuntu 16.04上安装Webmin控制面板和模块

Webmin是一个Web界面,允许您通过浏览器管理配置文件和重新加载程序,而无需SSH连接到您的Linode。它是cPanel或Plesk等管理面板的流行替代品...

973
来自专栏Hadoop实操

如何将Kerberos环境下CDH集群JAVA升级至JDK8

大家都知道在安装CDH时默认安装的JDK版本为jdk1.7.0_67,部分企业开发环境为JDK8版本,这个时候可能会出现在本地开发的应用在集群中无法正常运行。前...

4205
来自专栏有趣的Python

2- 快速上手Linux玩转典型应用- 搭建Linux环境

http://mirrors.163.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso

863
来自专栏北京马哥教育

Ansible 详细用法说明(一)

Ansible 一、概述 运维工具按需不需要有代理程序来划分的话分两类: agent(需要有代理工具):基于专用的agent程序完成管理功能,puppet, f...

3265
来自专栏小文博客

VULTR服务器被墙解决方案

今天由于某些特殊原因(不做过多解释),导致许多国内朋友服务器被墙。具体表现为 ping不通,网站无法访问。

6159
来自专栏码农阿宇

Linux下使用Nginx端口转发出现502错误的一种解决办法

今天圈里的一个朋友在配置完nfinx80端口转发到5000后,发现一个问题 问题描述: 正确配置了Nginx80端口转5000端口,在CentOS上把.Net ...

3165

扫码关注云+社区