Linux 内核 编译模块
背景:
由于调试内核或者由于分区大小限制,有时候内核组件不一定完全需要编进内核中。
所以,在开发中经常将内核组件编译成为模块,等到在恰当的时机加载。
概览:
Linux内核模块的编译方法有两种:
1.放入linux内核源码中编译。
2.独立编译模块。
放入Linux内核源码中编译:
首先需要了解Kconfig和Makefile的作用
Kconfig:对应内核模块的配置菜单。
Makefile:对应内核模块的编译选项。
Linux内核编译过程:根据配置裁剪的结果配合Makefile完成内核编译。
以ARM平台为例,具体配置过程:
1.当执行make menuconfig 时,系统首先读取arch/arm/Kconfig生成整个配置界面
2.在读取配置界面的同时,系统会读取顶层目录下的.config文件,生成所有配置选项的默认值
3.当修改玩配置并保存后,系统会更新顶层目录下的.config
4.当执行make时,各层的Makefile会根据.config文件中的编译选项来决定哪些文件会被编译到内核中,或者编译成模块。
添加到内核的步骤这里省去:《简单添加自己的驱动程序到Linux内核树中》
在内核配置页中,将组件配置成M模块以后,可以参考使用以下命令。(下划线部分根据实际情况增减)
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- modules
之后,便可以在打印信息中找到模块所在路径,拷贝出来即可。
例如
LD [M] drivers/media/usb/gspca/gspca_main.ko
LD [M] fs/exfat/exfat.ko
独立模块编译:
1.根据内核模块编写规则,编写好有关的模块。
2.新建Makefile,参考以下内容(根据实际情况进行修改,注意tab对齐)
# 最终的模块名
obj-m += led_drv.o
# 内核源码所在根目录
KERNELDIR:=/home/schips/linux3.18/
# 指定的编译工具链
CROSS_COMPILE:=/usr/local/cross/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-
# 以下内容一般不做修改
PWD:=$(shell pwd)
default:
$(MAKE) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *.order .*.cmd *.ko *.mod.c *.symvers *.tmp_versions
3. make 即可。
这里是Linux移植exfat驱动的实例:《Linux 内核添加exfat驱动》
Linux 内核 编译模块的更多相关文章
- 运行在TQ2440开发板上以及X86平台上的linux内核编译
一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...
- linux内核编译环境配置
linux内核编译环境配置 如果不是编译内核,只需要安装与内核相匹配的kernel-devel开发包即可.即是/lib/modules/`uname -r`/build -> /usr/src/ ...
- Linux内核编译与安装
2013-04-16 Linux内核介绍 Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.L ...
- Lab1:Linux内核编译及添加系统调用(详细版)
实验一:Linux内核编译及添加系统调用(HDU) 花了一上午的时间来写这个,良心制作,发现自己刚学的时候没有找到很详细的,就是泛泛的说了下细节地方也没有,于是自己写了这个,有点长,如果你认真的看完了 ...
- Linux内核编译、安装流程
原文链接:https://blog.csdn.net/qq_28437139/article/details/83692907 此处只讲linux内核编译步骤至于安装虚拟机,安装ubuntu操作系统请 ...
- Linux内核编译完整过程
Linux内核编译完整过程 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过 ...
- Linux内核编译配置脚本
环境 宿主机平台:Ubuntu 16.04.6 目标机:iMX6ULL Linux内核编译配置脚本 在linux开发过程中熟练使用脚本可以大大简化命令行操作,同时对于需要经常重复操作的指令也是一种备忘 ...
- Linux内核-模块编译和安装
我安装Ubuntu的时候是没有安装源码的,在没有安装源码前 /usr/src/ 目录下是只有两个包含内核的头文件的文件夹的: 我的内核版本是: 所以接下来就是先安装内核源码: 执行后,/usr/src ...
- Linux 内核编译
注:该文章部分内容摘录自以下链接. http://www.cnblogs.com/zhunian/archive/2012/04/04/2431883.html 创建内核的第一步是创建一个 .conf ...
随机推荐
- 关于Debug Assertion Failed问题
书上代码: #include<stdio.h> #include<stdlib.h> /* 提供malloc().free()函数 */ #include<string. ...
- 最全Python学习路线图【2020最新版】
2020年最新的python学习大纲,专为python高薪打造另外很多人在学习Python的过程中,往往因为没有好的教程或者没人指导从而导致自己容易放弃,为此我建了个Python交流.裙 :一久武其而 ...
- Mybatis之foreach用法----List、Array、Map三种类型遍历
在mybatis的xml文件中构建动态sql语句时,经常会用到标签遍历查询条件.特此记录下不同情况下书写方式!-------仅供大家参考------ 1. foreach元素的属性 collectio ...
- 【代码总结】GD库中添加图片水印
函数 getimagesize() bool imagecopymerge( resource dst_im, resource src_im, int dst_x, int dst_y, int s ...
- win10系统黑屏无法显示桌面解决
适用情况:win10系统 黑屏无法显示出桌面但是程序能正常运行时 解决方法:win+r 调出运行窗口 运行:Explorer.exe
- Kali中文乱码问题
上面的是用网上介绍的安装组件无法安装,老是提示最后一句:Unable to locate package ...... 后来觉得应该是因为安装Kali时在最后有个选择更新系统的一个配置上,我选择了下面 ...
- P1120/UVA307 小木棍(sticks) 题解
题目描述 pdf 题解 注意的问题是,各个原始木棒的长度都是一样的! 说一下本题的总思路即:DFS+超强力剪枝!(详见本人的 AC 程序) 首先,我们要从小到大枚举原始木棒的长度len,也就是枚举答案 ...
- 「TJOI2013」最长上升子序列
「TJOI2013」最长上升子序列 传送门 这个 \(\text{DP}\) 应该都会撒: \[dp_i = \max_{j < i,a_j < a_i}\left\{dp_j\right ...
- 为什么阿里Java规约要求谨慎修改serialVersionUID字段
serialVersionUID简要介绍 serialVersionUID是在Java序列化.反序列化对象时起作用的一个字段.Java的序列化机制是通过判断类的serialVersionUID来验证版 ...
- Windows 网络显示监视器软件_spacedesk
将各种设备拓展为 Windows 第二屏幕 官方网站 https://spacedesk.net/ 使用教程参阅: https://blog.csdn.net/sinat_21902709/artic ...