9-16会后小结

主题:内核模块编辑讨论

讨论会主要以大家提问为主,针对今天上机操作出现的问题进行进一步的学习。为了更好使会议内容重现,以下以所提的问题记录。
Q & A:
1. printf和printk的区别?
两个都是输出函数,但应该注意的是后者是内核模块编辑的输出函数,k代表内核。
2.有关命令中的空格问题。
有同学反映在make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules命令里,如果M后有空格,编译时系统会报错,所以这也提醒我们以后变成要养成严谨的好习惯,不要随意的加减空格,因为这些错误在代码多的情况下,是很难发现的。
3.关于obj-m  += hello.o
obj-后可以有三种形式可供选择,联系上次题目,我们便知道是y  n  m三种。
4.make clean 的作用。
用于清除.o文件生成.ko文件中一系列的中间文件,如.mod.c  ,.mod.o等文件,使得目录下只剩.c文件和makefile文件。
5.关于MODULE_LICENSE("Dual BSD/GPL")
这是个必须要有的许可指令,但是一些同学删除此句执行,没有发生异常,由此想到此命令是否为系统默认。
6.有关include中的文件。
内核中的头文件即/usr/src/linux-某版本/include与用户态下头文件/usr/include两者是不一样的,注意区分。
7.history初学者的福音
键入history,便能出现最新敲过的代码,即显示你的历史痕迹。
8.请学会用man命令查找不懂的命令。
man  命令名
9.关于module_init(hello_init)作用。
module_init(hello_init)是入口函数(调用头文件linux/module.h),在内核中注册,让内核知道。
10.编译问题
生成.o文件,再make 后即可生成目标文件.ko文件;加载ismod 目标文件;卸载rmmod 目标文件。
11.有关makefile中CURRENT_PATH:=$(shell pwd),这个当中为何有shell?
因为我们所在的终端是有shell命令编写的。
12.模块的好处?
如果不是以模块形式写的,每添加一点东西进去,就需要重新编写内核,耗时耗力。而模块形式编写,联系上次课题,我们只需要选择一下即可。
13.最后理一下内核模块编辑的逻辑顺序。
首先创建目录,其下创建.c和makefile文件,生成.o文件,再make命令是指生成.ko目标文件,insmod加载,dmesg查看是否添加上,或者用lsmod也可查看你的添加情况,rmmod卸载。

 

新增问题:

1.对于gcc和make编译区别。

gcc是在用户态下,把.c文件编译成为.o文件;内核模块编译是在非用户态下,这里是内核态下完成编译的,所以用gcc系统会报错,无法实现编译。

 

 

 

 

 

 

 

 

 

 

 

 

PS:欢迎大家批评指正,随时抛问题上来讨论!

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值