Linux操作系统原理与应用(第一章)细节指南

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


先写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<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值