5.2.4.最简单的模块源码分析3

Posted ocean-star

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.2.4.最简单的模块源码分析3相关的知识,希望对你有一定的参考价值。

  1. printk:printk内核态,printf用户态(没什么用)

打印级别内核把级别比命令行低的所有消息显示在终端(console)上。但是所有信息都会记录在printk的“ring buffer”中。

cat /proc/sys/kernel/printk(4 4 1 7)(比4小的能显示)
echo 4 > /proc/sys/kernel/printk(更改级别)
但是Ubuntu中中不管级别是怎样,都不能显示,必须dmesg日志等级:
技术分享图片

  1. 头文件:

include <linux/init.h> // __init __exit
__init和__exit在F:winsharekerneljiuding_kernelincludelinuxinit.c中定义

include <linux/module.h> // module_init module_exit

__module_init &module_exit在F:winsharekerneljiuding_kernelincludelinuxmodule.h中定义
注:应用编程头文件包含应用层的头文件,是应用程序的编译器带来的,与OS无关驱动头文件是内核源码的一部分,所以头文件是kernel下的include文件里的头文件,即F:winsharekerneljiuding_kernelinclude是默认被包含进来的。所以只需要写include文件夹里面的路径包含。
推测:如果想自己添加头文件,需要在F:winsharekerneljiuding_kernelinclude里添加????

  1. makefile

KERN_DIR = /root/driver/kernel 内核源码树的目录
obj-m += module_test.o -m表示将module_test.c编译成一个模块
all: make -C $(KERN_DIR) M=pwd modules
打印:make -C /root/driver/kernel M=pwd modules 进入到内核源码树下去编译
(M=pwd把当前路径记录下来,保证进入到内核源码树目录/root/driver/kernel编译后仍能回来)
工作原理就是:利用make -C进入到我们指定的内核源码树目录下,然后在源码目录树下借用内核源码中定义的模块编译规则去编译这个模块,编译完成后把生成的文件还拷贝到当前目录下,完成编译。
cp: cp *.ko /root/porting_x210/rootfs/rootfs/driver_test将.ko文件挂载到共享目录文件夹下
.PHONY: clean 伪目标














以上是关于5.2.4.最简单的模块源码分析3的主要内容,如果未能解决你的问题,请参考以下文章

最简单的模块源码分析

5.2.2.最简单的模块源码分析1

《Docker 源码分析》全球首发啦!

Mybatis源码分析三-数据源模块分析,工厂模式的使用

WorkerMan源码分析 - 实现最简单的原型

Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )(代码片段