linux内核移植x86平台

来源:互联网 发布:ise软件安装包 编辑:程序博客网 时间:2024/05/17 22:38

前面一段时间弄RTOS弄的比较多了,这段时间主要是计划移植linux,编写相关驱动,以前也各个linux版本都用过,但是久了没用了,因此,大多数都搞忘了,所以说啊,好记性不如烂笔头!下面我们开始移植linux到x86平台上

1、解压下载的linux内核,此处用的是3.2.12版本,如下所示

tar -jxf  [内核名字]

2、清除相关内容

此处,顺便提示下make clean和make distclean 的区别

make clean:用于清除之前编译的可执行文件及配置文件(*.o文件)

make distclean:用于清除所有生成的文件

3、配置.config文件

3.2.16版本比起2.6.X的版本看起来更加简洁了,默认的配置文件也是根据arch进行放置的,不再是放在include/configs下面了,X86默认配置文件放在arch/x8/configs下面,如下所示

注意:如果只是按照拷贝i386_defconfig配置文件进行整个工程配置,那么会出现以下错误



出现此个错误的原因,可能是由于i386_deconfig配置文件里面只是包括了关于x86 CPU的相关配置,而没有包括譬如文件系统、以及主板上除了CPU其他外设的一些模块,因此,会出现vfs_write错误,解决此问题办法如下:

将运行的linux,如本文用的centos的/boot/下面的配置文件拷贝到编译功能里面,命令如下 cp /boot/configure .config即可


4、编译内核

配置完成以后,我们就可以编译内核了,命令如下 make -j2,注意:后面-j2是因为我在虚拟机下面分配了一个核心但是里面有2个线程,即是采用两个线程进行编译,等一段时间,出现以下界面就代表编译成功了,如下所示

5、安装内核

从以上编译信息中可以看出,编译出来的内核放在了arch/x86/boot/bzImage下面,此时,运行make modules_install即安装内核

完成安装后,编译好的内核模块会从内核源代码目录拷贝到/lib/modules(虚拟机的目录,不是编译内核的目录!)下,如下图所示

上图可以看出,完成安装以后再/lib/modules下面多了一个3.2.12目录,即是我们编译安装的内核版本

6、制作initramdisk文件

initramdisk的作用是提供一种让内核可以简单实用的ramdisk的能力。这些能力包括:格式化一个ramdisk;加载文件系统内容到ramdisk;将ramdisk作为跟文件系统

制作方法如下:

进去boot/x86目录下,运行mkinitrd initrd-3.2.12 3.2.12,完成操作以后,会在当前目录下生成initrd-3.2.12。如下所示

7、准备系统启动文件

由于linux系统启动时,会从/boot目录下面寻找内核文件和init ramdist,所以需要将内核和init ramdisk拷贝到/boot目录下面,操作方法如下所示

注意:vmlinuz-3.2.12名字是可以随便取名,一般取名为:vmlinuz-[版本号]

8、配置grub选项

为了让grub在启动的时候能提供一项我们自己制作的linux内核的选项,需要改grub的配置文件,在原有内容的基础上,添加以下代码。

命令:vim /etc/grub.conf

添加以前如下所示:

添加后如下所示

添加启动选项只需要修改3个地方,第一:修改title;第二、修改内核名字,如vmlinuz-3.2.12;第三:修改ramdisk名字,如initrd-3.2.12

从上面可以看出,前面说的名字可以任意取,是因为只要名字对应起来就ok了

修改完成以后,保存重新启动系统就能够进入我们刚刚修改的内核,如下图所示



原创粉丝点击