更多课程 选择中心

嵌入式培训
达内IT学院

400-996-5531

嵌入式linux内核是怎样编译出来的?

  • 发布:嵌入式培训
  • 来源:嵌入式资讯
  • 时间:2020-06-19 14:45

Linux内核模块是一种可被动态加载和卸载的可执行程序。通过内核模块可以扩展内核功能,内核模块通常用于设备驱动、文件系统等。如果没有内核模块,需要向内核添加功能就需要自发代码、重新编译内核、安装新内核等步骤。

1、在编译内核时的工作路径

可以在任何路径下编译内核,如$HOME,但是绝对不推荐在/usr/local/linux下

2、内核版本

首先决定你要采用的内核的版本。大部分人都会选择最新的稳定版内核,内核的开发者释出的内核版本可按说明方式进行辨别确认。

3、下载内核维护者维护的特定补丁

(仅适用于采用早于2.6.0-test2的内核,之后版本的内核不再需要打arm的补丁)你应该选择下载最新的补丁,因为它可以修正更多的Bug并且包含最多的特性。

4、下载内核源文件

下载自己所需的内核文件。

5、解压并且安装补丁

到Linux内核文件Linux-2.*.*.tar.gz和补丁文件patch-2.*.*.gz所在路径$HOME

tar xzvf Linux-2.*.*.tar.gz 生成linux-2.*.* 的目录

cd linux-2.*.*

zcat ../patch-2.*.*.gz | patch -p1即可

6、配置内核的编译环境

通常情况下,内核编译系统会按宿主机架构编译生成内核。但这在交叉编译时是不使用的,所以我们需要在Makefile里的修改两行内容:

ARCH ?=$(SUBARCH)

CROSS_COMPILE ?=

改为:

ARCH= ?=arm

CROSS_COMPILE ?=/usr/local/bin/arm-linux-

或者把/usr/local/bin/arm-linux-替换为你的ARM工具链所在的路径。

到此完成内核Makefile的配置。下一步将进行内核的配置并选择你的平台所需要的驱动。

7、配置内核

输入命令:make menuconfig或make xconfig进行配置,选择你的相应的硬件驱动,或者你可以选者装载别的已经作好的配置文件。配置完成后保存配置文件退出。

8、编译内核

输入命令:

make clean

make zImage

make modules

后两步用来编译内核和内核模块,在2.6的内核中,不必再make dep;编译成功后将在$HOME/linux2.*.*/arch/arm/boot/下生成zImage内核景象文件,在当前目录下生成System.map

接下来的步骤取决于你是否采用交叉编译,如果是,你可以跳到第10步--“安装交叉编译的内核”,如果你是为宿主机编译内核继续看第9步。

9、安装本地内核

此步需要root权限。在安装内核时强烈建议先备份你目前的内核和模块。

cd /lib/modules

mv 2.*.*.rmk* 2.*.*.rmk*.old

cd /boot

mv vmlinuz vmlinuz.bak

mv System.map System.map.bak

完成备份后即可进行安装,到你编译内核的工作路径下

make modules_install

将会把模块复制到/lib/modules/x.y.z路径下。

接下来安装可执行的Linux内核镜象(一般是安装在/boot下)cat ./arch/arm/boot/zImage > /boot/vmlinuz或者cp ./arch/arm/boot/zImage > /boot/vmlinuz。或者可以做一个符号连接亦可:

cp System.map /boot

注:之所以用 cat ./arch/arm/boot/zImage > /boot/vmlinuz是因为传统上Unix不会为包含0数据的文件段在文件系统里分配空间,而是采用在文件里产生“孔”的方式。有些内核装载工具并不明白含有孔的文件,所以用cat可以避免此类意外发生。

10、安装交叉编译的内核

内核模块是被安装到目标系统的/lib/modules/x.y.z目录下的,通常情况下和宿主机上的目录不同。这个安装目录在哪里取决于你的设置,但是可统称为$TARGETDIR

安装模块到$TARGETDIR的命令如下:

make modules_isntall INSTALL_MOD_PATH=$TARGETDIR

此步将会把模块安装到宿主机的$TARGETDIR/lib/modules/x.y.z目录上,将来可以再装到合适的文件系统上。或者被移植到目标机上。

注:一定不要把这些模块安装到你主机的根文件系统上,(比如省略INSTALL—MOD—PATH,或者把$TARGET改为/)。因为如果这些为目标平台编译的模块和你的主机内核是兼容的,因此将可能造成系统不能启动。

最后,达内嵌入式培训机构提醒每一个it爱好者:如果你想要在短时间内快速入门,顺利掌握一门技术,建议还是认真学习视频。多练习,多动手。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:嵌入式linux开发运行基本流程
下一篇:想学好嵌入式都要学习哪些基础?

怎样才能学好单片机?

单片机:写1清零,写0清零,有什么区别?

嵌入式工程师一定不要乱用全局变量

嵌入式培训靠谱吗?就业怎么样?

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省