背景:

由于调试内核或者由于分区大小限制,有时候内核组件不一定完全需要编进内核中。
所以,在开发中经常将内核组件编译成为模块,等到在恰当的时机加载。

概览:

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 内核 编译模块的更多相关文章

  1. 运行在TQ2440开发板上以及X86平台上的linux内核编译

    一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...

  2. linux内核编译环境配置

    linux内核编译环境配置 如果不是编译内核,只需要安装与内核相匹配的kernel-devel开发包即可.即是/lib/modules/`uname -r`/build -> /usr/src/ ...

  3. Linux内核编译与安装

    2013-04-16    Linux内核介绍  Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.L ...

  4. Lab1:Linux内核编译及添加系统调用(详细版)

    实验一:Linux内核编译及添加系统调用(HDU) 花了一上午的时间来写这个,良心制作,发现自己刚学的时候没有找到很详细的,就是泛泛的说了下细节地方也没有,于是自己写了这个,有点长,如果你认真的看完了 ...

  5. Linux内核编译、安装流程

    原文链接:https://blog.csdn.net/qq_28437139/article/details/83692907 此处只讲linux内核编译步骤至于安装虚拟机,安装ubuntu操作系统请 ...

  6. Linux内核编译完整过程

    Linux内核编译完整过程 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过 ...

  7. Linux内核编译配置脚本

    环境 宿主机平台:Ubuntu 16.04.6 目标机:iMX6ULL Linux内核编译配置脚本 在linux开发过程中熟练使用脚本可以大大简化命令行操作,同时对于需要经常重复操作的指令也是一种备忘 ...

  8. Linux内核-模块编译和安装

    我安装Ubuntu的时候是没有安装源码的,在没有安装源码前 /usr/src/ 目录下是只有两个包含内核的头文件的文件夹的: 我的内核版本是: 所以接下来就是先安装内核源码: 执行后,/usr/src ...

  9. Linux 内核编译

    注:该文章部分内容摘录自以下链接. http://www.cnblogs.com/zhunian/archive/2012/04/04/2431883.html 创建内核的第一步是创建一个 .conf ...

随机推荐

  1. ypACM社团年终赛暨实验室选拔赛题解

    记得补题,题目两小时半还是挺困难ak的,毕竟我验题也验了几天的时间,题目基本没有锅.题目基本属于简单题 我的三道题都是很基本的题目,希望大家补题 这些题解都是我写的,如果有疑问可以qq问我 所有的核心 ...

  2. Update(Stage4):Structured Streaming_介绍_案例

    1. 回顾和展望 1.1. Spark 编程模型的进化过程 1.2. Spark 的 序列化 的进化过程 1.3. Spark Streaming 和 Structured Streaming 2. ...

  3. Centos610安装Oracle

    官方安装参考 第一部分 依赖包 依赖包安全前先桌面安装 安装依赖包 yum -y install gcc gcc-c++ make binutils compat-libstdc++-33 elfut ...

  4. stack的使用-Hdu 1062

    Text Reverse Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  5. static在c\c++中的作用(翁恺c++公开课[28-29]学习笔记)

    static相对来说是一个较复杂的修饰符,c++中的static在c的基础之上又包含了static在类中的应用(也就是说多了static的成员变量和static的成员函数):c\c++中静态变量.对象 ...

  6. 云账房获取2.76亿元D轮投资

    财税管理SaaS服务商云帐房 南京云帐房网络科技有限公司正式成立于2015年3月,法定代表人为薛兴华. 2015年获得600万人民币天使轮融资,投资方为AA投资: 2016年5月份完成数千万人民币A轮 ...

  7. LSTM算法公式

    参考:<基于强化学习的开放领域聊天机器人对话生成算法>

  8. Centos7 nginx的目录结构与nginx主配置文件解析

    一.nginx的目录结构 [root@node nginx_116]# ls client_body_temp  conf  fastcgi_temp  html  logs  proxy_temp ...

  9. Solr与tomcat搭建(搭建好)

    https://pan.baidu.com/s/1kXagNYJ  密码:hgxd

  10. pytest+allure(pytest-allure-adaptor基于这个插件)设计定制化报告

    一:环境准备 1.python3.6 2.windows环境 3.pycharm 4.pytest-allure-adaptor 5.allure2.8.0 6.java1.8 pytest-allu ...