五、内核模块化编程

1、模块化编程概念:

C语言阶段:将功能分成.c和.h文件

MCU阶段:.c和.h对应一个硬件或者功能的模块

Linux驱动:主要对应着硬件的模块(led灯、按键),指的是最终生成的.ko文件,这个ko文件可 以模块化的动态的加载到内核里。

2、内核层代码的架构

        1)当我们的进程启动的时候,我们的操作系统会为进程虚拟出一块4G大小的内存空间,虚拟空间最终会映射到真实的物理空间,这块空间分成了两部分:0-3G:用户空间(应用层) 3-4G:内核空间(内核层);我们之前所写代码都是运行在应用空间的,是无法直接访问硬件的,我们可以通过特殊接口来直接访问硬件。

        2)内核代码框架

//1:内核层代码头文件
#include<linux/kernel.h>
#include<linux/module.h>
//2:内核层没有main 他有加载函数和卸载函数
//加载函数的格式
static int __init myled_init(void)
{
	return 0;
}
//卸载函数的格式
static void __exit myled_exit(void)
{
}
//3:声明函数
//声明加载函数
module_init(myled_init)
//声明卸载函数
module_exit(myled_exit)
//声明开源协议
MODULE_LICENSE("GPL")

     3、内核代码的编译使用

        1)编译   

        我们的代码是运行在Linux3.5内核环境下的,还需要用到交叉编译工具,所以我们必须借助makefile来完成。

obj-m +=led.o
KDIR:=/home/lym/work/203/3neihe/linux-3.5
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.ko *.o *.mod.c  *.order  *.symvers

说明:

obj-m:以模块化的方式编译内核

+=:追加

KDIR:编译代码的时候依赖的内核的路径

all:目标

-C:指定编译的路径

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

make -C $(KDIR) M=$(PWD) modules

该命令是make modules命令的扩展,-C选项的作用是指将当前的工作目录转移到制定的目录,即(KDIR)目录,程序到(PWD)当前目录查找模块源码,将其编译,生成.ko文件。

KDIR表示内核源码目录,这种方式适用于嵌入式开发的交叉编译,KDIR目录中包含了内核驱动模块所需要的各种头文件及依赖。

        2)使用

        模块的加载--他会执行 XX_init函数

        insmod led.ko

        模块的卸载 ----他会执行XX_exit函数

        rmmod led.ko

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值