读书频道 > 网站 > 网页设计 > Linux内核精髓:精通Linux内核必会的75个绝技
交叉编译内核
13-02-19    奋斗的小年轻
收藏    我要投稿   
经过近20年的发展,Linux操作系统已经成为当今最成功的开源软件之一,使用广泛,影响深远。随着Linux操作系统功能的不断丰富和完善,Linux内核的源代码也从最初的几万行增加到如今的数百万行,庞大无比,对于Lin...立即去当当网订购

交叉编译是指针对与正在执行编译的平台不同的其他平台生成二进制数据。例如,在x86_64环境下生成针对ARM的二进制数据的情形。这种编译器又称为“交叉编译器”。

只要拥有交叉编译器,对Linux内核进行交叉编译就变得非常简单。这时还需要为make赋予两个变量,如表1-10所示。

表1-10 交叉编译所需的变量
变  量 说  明
ARCH 对象架构
CROSS_COMPILE 指定交叉编译器的前缀

举一个使用交叉编译器armv5tel-linux-gcc来交叉编译ARM内核的例子。在这种情况下,make命令变成如下所示的内容。

ARM内核的二进制映像较多使用的是uImage格式。第一行创建这个格式的二进制映像,第二行创建模块。

$ make ARCH=arm CROSS_COMPILE=armv5tel-linux- uImage

$ make ARCH=arm CROSS_COMPILE=armv5tel-linux- modules

创建的内核二进制映像作为源码树内的arch/arm/boot/uImage文件。

创建的内核和模块必须转移到对象机器上。如果在对象机器上可以使用源码包管理系统,则最简单的方法就是生成源码包并在对象机器上安装。然而,如果不能使用源码包管理系统,虽然内核映像转移起来很简单,但是模块就有一些问题。模块分散在源码树的各个目录下,想要手动查找这些模块并在/lib/modules下构建目录树,是不太现实的。

其实,通过modules_install安装模块的位置可以用变量INSTALL_MOD_PATH来指定。可以利用这一点,例如,当安装在主目录下时,可以用tar对每个目录进行整合,再转移到对象机器上。这一操作可以用下列命令来实现。

$ make ARCH=arm CROSS_COMPILE=armv5tel-linux- INSTALL_MOD_PATH=~/armroot-2.6.38 modules_install

这样就会在主目录下生成一个标题为~/armroot-2.6.38/lib/modules的目录,模块就安装在这个目录下。

模块的目录下有标题为build和source的符号链接,这些都是指向编译过内核的源码树。如果在对象机器上完全不进行编译,就不需要进行修改,如有必要可以在对象机器上适当修改。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站