现在的位置: 首页 > 综合 > 正文

Linux内核编译

2017年05月19日 ⁄ 综合 ⁄ 共 1384字 ⁄ 字号 评论关闭
几个概念:
1. 内核源码树:
简单来说就是Linux内核源代码,它是编译驱动的前提;ubuntu系统默认情况下是没有的;需要自己手动去下载内核源码树;
2.  驱动最终以*.ko的形式生成,insmod的本质就是将ko文件与运行的内核进行链接的过程。类似于编译helloworld的链接过程。

链接必然需要先进行编译,以便确定所需的外部符号(EXPORT_SYMBOLS)是否存在,因为有些符号(函数或全局变量)在
内核中。在驱动中如果使用到这些符号,必须预留一个位置,insmod时进一步确定这些符号的具体位置(符号绑定)。
如果内核都没有编译过,怎么知道这些符号有没有编入内核中;

编译Linux的步骤:
1:首先要查看自己系统是使用的内核版本
>> uname -r
如果系统自动安装了源码。在/usr/src目录下面会有对应的使用的版本,我那个版本没有,我是自己下载的
>> ls

 
其中linux2.6和linux-source-3.2.0是我自己下载的;

2. 如果没有源码,查看一下可以下载的源码包(不要使用超级用户使用此命令,他会提示没有这个命令)
>>apt-cache  search  linux-source
linux-source - Linux kernel
source with Ubuntu patches
linux-source-3.2.0 - Linux kernel source for version 3.2.0 with Ubuntu patches
 
然后下载linux-source-3.2.0
#sudo apt-get   install  linux-source-3.2.0
下载完成之后,会在/usr/src下,文件名为linux-source-3.2.0.tar.bz2这个压缩包,解压之后就可以得到整个源代码
 
# sudo  tar jxvf  linux-source-3.2.0.tar.bz2
 
解压之后会生成一个新的目录/usr/src/linux-source-3.2.0,现在所有的源代码都在里面
 
3:现在开始配置内核,有三种选择选择方式1:make oldconfig   2:make  menuconfig 3:make  xconfig
 
我选择的是最快的配置原版的配置方法
#sudo   make  oldconfig  
(如果配置的过程中出现问题,原因是因为你没有下载配置环境的那个依赖的库文件,可以自己下载)
配置完成之后就要开始对内核进行编译了
在配置时,会出现因为配置过程中的CONFIG_RTS5139值为空而出现编译错误,建议配置为n:


 当然,也可以在.config隐藏文件中修改过来;

4:编译内核  
  #sudo  make 
 
这个过程很漫长,建议去做做别别的事情吧~;大约需要1个小时;
 
5. #sudo  make  bzImage
 
编译内核的结果最终出现了几个错误,但最终对那个Hello  World 没有造成影响
执行结束之后,会在当前目录下面生成一个新的文件:vmlinux
 
5:然后就是编译模块了
 
#sudo make  modules 
 
6:安装模块
 
#sudo  make  modules_install
 
执行结束之后,会在/lib/modules下生成一个新的目录/lib/modules/3.2.0/
 
在随后的编译模块文件时,需要用到这个路径下的build目录。到这一步,内核就编译完成了 

抱歉!评论已关闭.