如何反编译IMG(内核)文件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何反编译IMG(内核)文件?相关的知识,希望对你有一定的参考价值。
先介绍一下编译核心的选项,希望能对大家消除对内核的神秘感有所帮助。1.代码成熟等级
2..处理器类型和特色
3.对模块的支持
4.基本的选择
5.即插即用支持
6.块设备支持
7.网络选项
8.电话支持
9.SCSI设备的支持
10.I2O接口适配器
11.网络设备支持
12.配置业余无线广播
13.红外支持
14.ISDN的文件系统
15.旧型的光驱类型(非IDE界面的光驱)
16.字符设备
17.USB支持
18.文件系统
19.控制台驱动
20.声卡驱动
21.Kernel hacking
第二节 内核版本
由于Linux的源程序是完全公开的,任何人只要遵循GPL,就可以对内核加以修改并发布
给他人使用。Linux的开发采用的是集市模型(bazaar,与cathedral--教堂模型--对应
),为了确保这些无序的开发过程能够有序地进行,Linux采用了双树系统。一个树是稳
定树(stable tree),另一个树是非稳定树(unstable tree)或者开发树(developm
ent tree)。一些新特性、实验性改进等都将首先在开发树中进行。如果在开发树中所
做的改进也可以应用于稳定树,那么在开发树中经过测试以后,在稳定树中将进行相同
的改进。一旦开发树经过了足够的发展,开发树就会成为新的稳定树。开发数就体现在
源程序的版本号中;源程序版本号的形式为x.y.z:对于稳定树来说,y是偶数;对于开
发树来说,y比相应的稳定树大一(因此,是奇数)。确定是以″ root ″的身份签入,
然后cd 到 /usr/src 。uname -r 这个指令将会显示版本。内核版本的更新可以访问<h
ttp://www.kernel.org/>。
第三节 编译原因
Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了
旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的
系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。
通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、更稳
定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是
Linux使用者的必要操作内容。
为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主
要有下面四个考虑:
---自己定制编译的内核运行更快(具有更少的代码)
---系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)
---不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞
---将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些
以上是针对成熟的Linux套件如Redhat Linux而言,我的目的是为建造嵌入式Linux操作系
统做准备,也是必由之路。
第四节 准备工作
第一部分 新版本内核的获取和更新
Linux内核版本发布的官方网站是< http://www.kernel.org/>,国内各大ftp上一般都可
以找到某些版本的内核。新版本的内核的发布有两种形式,一种是完整的内核版本,另
外一种是patch文件,即补丁。完整的内核版本比较大,比如linux-2.4.0-test8.tar.b
z2就有18M之多。完整内核版本一般是.tar.gz(.tgz)文件或者是.bz2文件,二者分别
是使用gzip或者bzip2进行压缩的文件,使用时需要解压缩。patch文件则比较小,一般
只有几十K到几百K,极少的会超过1M。但是patch文件是针对于特定的版本的,需要找到
自己对应的版本才能使用。
编译内核需要root权限。把需要升级的内 拷贝到/usr/src/下(下文中以2.2.16的内核
的linux-2.2.16tar.gz为例),命令为
#cp linux-2.2.16tar.gz /usr/src
先查看当前/usr/src的内容,注意到有一个linux的符号链接,它指向一个类似于linux
-2.2.14(对应于现在使用的内核版本号)的目录。首先删除这个链接:
#cd /usr/src
#rm -f linux
现在解压下载的源程序文件。如果所下载的是.tar.gz(.tgz)文件,使用命令:
#tar -xzvf linux-2.2.16tar.gz
如果下载的是.bz2文件,例如linux-2.2.16tar.bz2,使用命令
#bzip2 -d linux-2.2.16tar.bz2
#tar -xvf linux-2.2.16tar
现在再来看一下/usr/src下的内容,发现现在有了一个名为linux的目录,里面就是需要
升级到的版本的内核的源程序。还记得那个名为linux的链接么?之所以使用那个链接就
是防止在升级内核的时候会不慎把原来版本内核的源程序给覆盖掉了。现在也需要同样
处理:
#mv linux linux-2.2.16
#ln -s linux-2.2.16 linux
如果还下载了patch文件,比如patch-2.2.16,就可以进行patch操作(下面假设patch-
2.2.16已经位于/usr/src目录下了,否则需要先把该文件拷贝到/usr/src下):
#patch -p0 < patch-2.2.16
第二部分 准备主机板和相关硬件的说明手册
其实也不用太详细,只要知道您的硬件是属于哪一类型就行了。例如:有一张SCSI卡,
那就要知道这张卡的名字,有一台cd-rom,就要知道这台光驱是哪一种牌子的,是否为标
准的IDE/ATAPI界面,还是另有专属接口卡呢?或者,主机版是否有支持Triton芯片(通
常586以上的电脑常有),这些信息能帮助我们,使得设定变得清楚且容易。
因此,不管您有什么使用手册,准备好吧。即使现在不用,将来还是会用到的(设X-w
indow system时要显示卡的手册)。
第三部分 检查声卡的IRQ设定和其种类
如果配有一张声卡,除了要知道卡的种类外(例如 Sound Blaster)还需要知道这张卡
的IRQ地址。一般来说,卢卡的IRQ地址是5或7而IO地址则为220。DMA则l,不过,有时不
同的声卡可能会有不同的设定。因为稍后的选项里,就会要填入这些数字。
第四部分 编译核心的硬件需求
在编译核心时,确定您的RAM最好在8MB以上, 否则可能会很慢而且问题会很多,记得查
看swap有没有打开(用free指令)。此外,最好不要超频,不然很有可能会发生signal
11的错误,使得编到一半的核心停了下来,其实编译核心就好比编译程序一样,只是因
为构成核心的程序太多了,因此我们能小心尽量小心。 参考技术A 君君,你回家查资料吧!
树莓派Linux内核配置编译以及烧录详细步骤
目录
一、内核配置
进入linux-rpi-4.14.y目录
第一种方式:(cp 厂家.config .config)
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
第二种方式(make menuconfig 一项项配置,通常是基于厂家的config来配置)
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig
上下左右键进行操作
如何配置树莓派的Linux内核
驱动两种加载方式:
* 编译进内核 zImage包含了驱动
M 模块方式生成驱动文件xxx.ko 系统启动后,通过命令inmosd xxx.ko 加载
二、内核编译
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs
j4以4进程编译。不指明几进程的话则默认以单进程编译
zImage生成内核镜像
modules要生成驱动模块
dtbs生成配置文件
编译成功后,看到源码树目录多了vmlinux,失败则无此文件(如上图)
成功后,目标zImage镜像arch/arm/boot底下
打包zImage成树莓派可用的xxx.img
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img
将SD卡插上读卡器,如图连接到Ubuntu
三、烧录
数据拷贝:
1、创建两个文件夹
mkdir data1
mkdir data2
2、挂载u盘
sudo mount /dev/sdb1 data1 fat分区,是boot相关的内容,
sudo mount /dev/sdb2 data2 ext4分区,也就是系统的根目录
3、安装modules
(设备驱动文件: hdmi usb wifi io等等)
进入如下目录:
输入如下命令
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=[ext4] modules_install
[ext4]为你要生成的绝对路径
例如我的是:
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/lhg/data2 modules_install
4、安装更新 kernel.img 文件,注意镜像名字是kernel7.img
前面已经用 mkknlimg 工具打包了kernel_new.img文件了,把它复制到boot分区并配置使用即可:
cp kernel_new.img [fat]/
先备份
进入目录:cd /home/lhg/data1
然后输入:cp kernel7.img kernel7OLD.img
再把编译新生成的拷贝到data1,起名kernel7.img
cp kernel_new.img /home/lhg/data1/kernel7.img
用md5sum命令看看拷贝过程文件有没有损坏,如图
5、拷贝配置文件
分别输入如下命令(注意需要把目录改成你的)
cp arch/arm/boot/dts/.*dtb* /home/lhg/data1
cp arch/arm/boot/dts/overlays/.*dtb* /home/lhg/data1/overlays/
cp arch/arm/boot/dts/overlays/README /home/lhg/data1/overlays/
6、启动
将SD卡插入树莓派,用串口连接至电脑上电
输入
uname -r
可以看到内核版本已经变了
以上是关于如何反编译IMG(内核)文件?的主要内容,如果未能解决你的问题,请参考以下文章