这篇文章主要介绍“Linux模块文件如何编译到内核和独立编译成模块”,在日常操作中,相信很多人在Linux模块文件如何编译到内核和独立编译成模块问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“Linux模块文件如何编译到内核和独立编译成模块”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1。内核目录
Linux内核源代码非常庞大,随着版本的发展不断增加。它使用目录树结构,并且使用Makefile组织配置,编译。
初次接触Linux内核,好仔细阅读顶层目录的readme文件,它是Linux内核的概述和编译命令说明.readme的说明侧重于X86等通用的平台,对于某些特殊的体系结构,可能有些特殊的说明。
顶层目录的Makefile是整个内核配置编译的核心文件,负责组织目录树中子目录的编译管理,还可以设置体系结构和版本号等。
内核源码的顶层有许多子目录,分别组织存放各种内核子系统或者文件。具体的目录说明如下表所示。
2。编译工具
1。使mrproper:清除内核生成的配置文件与目标文件等,一般在第一次编译时使用
2。导入默认配置信息(在内核根目录中)
<>之前),make xxx_deconfig b), cp 拱/胳膊/配置/xx_deconfig , .config 生成默认配置文件3。配置命令
make xxxxconfig ,修改配置文件,make xconfig (图形界面,qt库),make menuconfig (常用,libncurses库),sudo apt-get install libncurses5-dev make config (精简)
4。编译内核
make uImage - - -生成内核镜像,,/arch/胳膊/boot/uImage
5。编译设备树
make dtbs - - -生成设备树文件,,/arch/胳膊/boot/dtb xxxxxx.dtb
6。编译生成模块文件
make modules ——把配置值选成M的代码编译生成模块文件。(.ko),,放在对应的源码目录下。
3。,内核编译
现在很多基于Linux的产品开发,通常厂家都会提供集成开发环境SDK.builroot使我们搭建环境变得更加方便,但是作为初学者我们还是要掌握如何独立编译内核源码。
0)前提条件
必须先安装交叉编译工具链,关于交叉编译工具链的安装可以参考《Linux环境搭建-ubuntu16.04安装》
在这里我们使用的是arm-none-linux-gnueabi-gcc。
1)下载内核源码
下载地址:https://mirrors.edge.kernel.org/pub/linux/kernel/
我们下载Linux - 3.14内核(可以是更高的版本)至/home/彭目录。
或者直接点击下面链接,https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/linux-3.14.10.tar.xz
解开压缩包,并进入内核源码目录,具体过程如下:
<>之前,美元tar , xvf , linux-3.14.tar.xz 美元,cd , Linux - 3.142)修改内核目录树根下的Makefile,指明交叉编译器:
<>之前,美元vim Makefile找到拱和CROSS_COMPILE,修改:
ARCH , ?=, (SUBARCH)美元,CROSS_COMPILE ?=,美元(CONFIG_CROSS_COMPILE:““=%)
为
ARCH , ?=, arm CROSS_COMPILE ?=, arm-none-linux-gnueabi——,
,
3)配置内核产生。config文件:
导入默认配置
<>之前,美元make , exynos_defconfig这里我们假定要编译的内核最终在三星的板子上运行,soc名字是exynos,三星公司其实已经将自己的配置文件放置在,./ARCH/胳膊/配置/exynos_defconfig
执行这个命令,最终会在内核根目录下生成。配置文件,
<强>我们编译内核就完全依赖这个文件>强。该文件是exynos开发板所需要的一些内核模块宏定义和参数设置,这些值是厂商给的一个初始配置。实际项目开发中,需要在这个配置文件基础之上再重新移植自己需要的对应的驱动模块。
4)配置内核模块
输入内核配置命令,进行内核选项的选择,命令如下:
<>之前,美元make menuconfig命令执行成功以后,会看到如下图所示的界面。其实我们在图1.5中看到过同样功能的界面,那个图也是内核选项配置界面,只不过那个界面在图形界面下才能执行。