博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux操作系统原理与应用(第一章)细节指南
阅读量:4281 次
发布时间:2019-05-27

本文共 1316 字,大约阅读时间需要 4 分钟。

第一个内核模块嵌入由于书上代码实在简洁,自己研究通过,供大家参考

先写makefile 文件起名一定要Makefile 首字母大写,否则make过程中不能调用自己

其次,makefile仔细研究,发现

LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL)

#内核源代码的绝对路径要根据系统实际变化

最后 最坑的是大家不熟悉makefile的 根本不知道

make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules

中 M前后到底有没有空格,M前有空格,后面没有

clean modules前有一个空格

$前有一个空格

:=连着没空格,后面接变量也没有

all:后跟tab常识..

通过的makefile如下,可直接复制:

obj-m:=hellomod.o                             #obj-m:=是赋值语句,使用目标文件hellomod.o生成模块hellomod.ok #产生hellomod模块的目标文件CURRENT_PATH:=$(shell pwd)#模块所在的当前路径LINUX_KERNEL:=$(shell uname -r)#内核源代码的当前版本 LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL)#内核源代码的绝对路径all:	make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules#编译模块 clean:	make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean
通过的hellomod.c:

#include
#include
#include
int lkp_init(void){ printk("<1>Hello,from the kernel sapce\n"); return 0;}void lkp_cleanup(void){ printk("<1>goodbye,leaving kernel sapce\n");} module_init(lkp_init); module_exit(lkp_cleanup); MODULE_LICENSE("GPL");
注释书上有 仔细读;

最后 再sodu make搞定

我的linux生成一堆

hellomod.c   hellomod.mod.c  makefile~  modules.order

C++11.cpp  hellomod.c~  hellomod.mod.o  Makefile   Module.symvers
cp.c       hellomod.ko  hellomod.o

然后照着书后操作 sudo insmod hellomod.ko即可

最后关于查看日志

我的linux也显示出很多日志文件 具体显示可以找

kern.log 或 syslog

转载地址:http://ttfgi.baihongyu.com/

你可能感兴趣的文章
Tomcat的GC优化实践
查看>>
idea多模块项目间通过配置pom.xml相互引用
查看>>
(转)MYSQL如何设置大小写敏感
查看>>
SpringBoot单元测试,无法导入@RunWith
查看>>
(转)hbase balance命令走过的坑
查看>>
Linux环境cpu过高,定位问题步骤(附实例)
查看>>
(转)java final关键字使用及面试题重点
查看>>
(转)CDH下集成spark2.2.0与kafka(四十一):在spark+kafka流处理程序中抛出错误java.lang.NoSuchMethodError:
查看>>
(转)maven打包时跳过测试
查看>>
(转)jstack命令执行报错:Unable to open socket file: target process not responding or HotSpot VM not loaded
查看>>
Centos7.5 离线安装firefox
查看>>
Nginx安装(linux)
查看>>
flume实例(一):监控目录
查看>>
flume实例(二):监控服务器日志
查看>>
flume实例(三):扇入
查看>>
SparkStreaming(1):提交wordcount功能
查看>>
SparkStreaming(2):粗粒度和细粒度总结
查看>>
SparkStreaming(3):构建StreamingContext
查看>>
SparkStreaming(4):Discretized Streams (DStreams)理解
查看>>
SparkStreaming(5):处理不同数据源(socket源数据或者处理本地/HDFS文件)
查看>>