Linux内核编译与安装


平台:虚拟机Ubuntu10.04
内核版本:3.0.80       
----------------------------------------------------------------------------------------------------
内核的编译分为两种:X86平台和ARM嵌入式平台
 
一.X86
 
平台:虚拟机Ubuntu10.04
 
内核版本:3.0.80
 
1.下载(并安装)源码:linux-3.0.08
 
https://www.kernel.org/pub/linux/kernel/
 
网站默认的源码支持的为X86平台,下载源码解压到自定义的目录:/root(此目录是我自己建的,你尽可以解压到任意目录),解压后生成内核文件夹:linux-3.0.80
 
2.下载(并安装)终端处理库:libncurses5-dev
 
这个库用于后面的内核配置界面命令的执行环境。许多人在线安装软件包会遇到网速过慢的情况,这里建议先在“新立得软件管理”里搜索到适合自己系统的软件包版本,然后在下述网址搜索下载,最后离线安装即可。
 
网址1:
  https://launchpad.net/ubuntu
 
网址2:
   http://packages.ubuntu.com/
 
3.内核配置:
 
终端界面,执行以下命令:
cd /root/linux-3.0.80# 进入内核根目录
make meuconfig      #进入内核配置界面
 
此时,出现如图内核配置界面:
 
上下键选择相应的选项,空格键更改相应的选项的属性:
[*]把此项编入系统内核
[M]把此项以驱动模块的形式编译。
[]不选择编译此项。
 
双击Esc后退。选择完后退出,提示是否保存,确定即可。这时候在根目录下生成一个隐藏文件:.config
 
里面以“文本”的形式记录下你的配置信息。当你后续编译的时候即按照这个文件的信息进行编译。
 
当然,你也可以直接输入:
make defaultconfig
 
来执行默认的配置信息。
 
这里还要叙述一下另外两个文件:Kcongfig和Makefie。
 
这两个文件分布在内核源码树的各个目录下,其中Kconfig构成了一个分布式的内核设置数据库,每个Kconfig描述了所属目录源文件相关的内核设置菜单。在内核设置make menuconfig(或xconfig等)时,从Kconfig中读出菜单,用户在配置界面选择后保存到.config的内核设置文件中。在内核编译时,Makefile调用这个.config,就知道了用户的选择。
 
比如,要想添加新的驱动到内核的源码中,要修改Kconfig,这样就能选择这个驱动。如图
就是下图USB_SURPORT的菜单信息
如果想使某个驱动被编译,要修改Makefile,如图:
也就是说,Kconfig负责使你的配置菜单显示出来。而真正要想编译出来相应的模块是由Makefile来负责的。而上图中等号右边的文件名对应的c源代码,就在Makefile当下的目录下,Makefile负责引导编译这些c源代码变成相应的文件。
3.编译:
      如果是编译整个内核,直接输入:
make
而实际上,为了加快编译速度我们常常执行
make -j4
其中数字4可以理解为4线程同时编译,所以速度会快。理论上数字应为实际cpu核心+1.但是,如果你是双核的就直接写成 make -j4也是没有问题的。另外需要解释的是,你会看到一些文档的执行命令是: make bzlmage。实际上,make命令默认的执行的是:Make bzlmage和make modules,即编译内核和内核驱动。而生成的内核镜像zlmage在内核源码目录下:arch/x86/boot或者是arch/i386/boot.
 
而如果你只是编译驱动的话,请执行:
make modules
 
就行了。
 
4.安装:
 
安装模块:
make  modules_install
 
执行后,系统会在/lib/modules目录下生成一个3.0.8子目录,里面存放着新内核的所有可加载模块(即将编译好的modules拷贝到/lib/modules下),注意,此目录是系统的目录,不是内核源码的目录。
 
安装内核:
make install
 
执行后,即复制内核目录内的.config,vmlinuz,initrd.img,System.map文件到系统/boot目录、更新grub。
 
5.检查:
dpkg--get-selections|grep linux
 
此命令可以查看当前安装的内核版本号有哪些,从而看到我们是否把新内核安装到系统了
 
6.重启:
Reboot
 
在内核选择界面,选择内核版本号。对于不同的系统,有可能得修改一下启动引导文件。这里先不叙述。
 
好了,这就是X86内核的编译与安装。
------------------------------------------------------------------------------------------------------
 
二 ARM
 
平台:Ubuntu10.04 
 
交叉编译环境:arm-linux-gcc  4.5.1
 
目标开发板:友善之臂tiny210
 
内核移植版本:3.0.8
 
1.下载内核
 
2.下载终端处理库
 
3.建立交叉编译环境:
 
虚拟机上默认的系统的编译器是X86的,也就是说编译完成的内核是适用于X86机器的。所以我们必须安装交叉编译环境,使X86机器编译出的内核适用于ARM平台。一般所买的开发板都配套有开发板建立交叉编译环境的说明文档,这里我简要的说明一下:
 
1.首先把交叉编译器拷贝到Ubuntu系统任意目录:
 
在终端命令行输入:
      cd /tmp       #进入所在目录
      tar xvzfarm-linux-gcc-4.5.1-v6-vfp-20101103.tgz –C /#解压安装
 
执行后,将把arm-linux-gcc安装到/opt/FriendlyARM/toolschain/4.5.1目录
 
2.编辑环境变量:
      gedit /root/.bashrc      #打开文件.bashrc,
 
最后一行添加:
 
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin,注意路径一定要写对,否则将不会有效。
3.注销计算机后,重新回到命令终端,执行命令:
arm-linux-gcc –v
 
会出现如下信息,这说明交叉编译环境已经成功安装
其实,你只需要看到最后一行gcc version 4.5.1就行了。
 
4.配置交叉编译器:
 
如果此时我们执行make命令来编译内核的话,系统默认的依然是调用gcc编译器来编译。执行:
gdit Makefile   #打开源码目录下的Makefile文件
 
找到下面两行:(192行左右)
修改为:
 
这个时候,我们再执行make命令,就会调用交叉编译器。
 
4.修改内核:
 
其实,原生X86的内核是不适用于ARM开发板的,一般情况下我们需要做相应的移植工作。网上关于特定开发板的内核移植有相应的文章。而实际上如果要独立的做内核移植的话,需要对linux内核和嵌入式开发有不错的理解。但是一般情况下,开发板配套的都会有适合此开发板的已经移植好的内核。所以在第一步确切的应该是:从开发板获得内核源码。而且这样获得内核源码一般会省略掉上一步中修改Makefile文件的步骤。
 
5.编译内核:
 
执行:
make -j4
 
执行完后,会在arch/arm/boot生成zlmage镜像。运用开发板配套的内核烧录工具下载到开发板即可。
 
好了,就这样!

相关内容