linux设备驱动开发 第一个驱动程序-1

参考:宋宝华 Linux设备驱动开发详解  嵌入式Linux驱动开发教程

开发环境:ubuntu16.04

所需Makefile文件感谢网友,链接:https://www.cnblogs.com/guanguangreat/p/7920378.html

1- hello world 模块代码,名字取为hello.c。由于Makefile文件不会写,直接复制过来,人家用的就是hello.c,其他名字编不过。。。

#include<linux/init.h> //包含module_init module_exit
#include<linux/kernel.h> //包含printk函数声明
#include<linux/module.h> //

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
    printk(KERN_ALERT"hello world enter\n");
    return 0;
}
static void helllo_exit(void)
{
    printk(KERN_ALERT"hello world exit\n");
}

module_init(hello_init); //_init只会被调用一次
module_exit(helllo_exit);

MODULE_AUTHOR("lhk"); //作者
MODULE_DESCRIPTION("a simple hello world module"); //模块描述
MODULE_ALIAS("hello world module"); //模块别名

2- Makefile 文件

注意名字一定是Makefile!!!!并且注意TBL缩进。

ifneq  ($(KERNELRELEASE),)
obj-m:=hello.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)
all:
	make -C $(KDIR) M=$(PWD) modules
clean:
	rm -f *.ko *.o *.symvers *.cmd *.cmd.o
endif

之后在目录执行make命令,编译出所需的ko文件

make

3- 模块加载 模块卸载 查看模块信息

在编好的ko目录下,执行模块加载命令,将模块加载到内核

insmode hello.ko

通过lsmod查看内核中模块,通过dmesg查看那内核加载信息;通过modinfo查看模块信息

lsmod
dmesg
modinfo hello.ko

模块加载成功后,通过lsmod查看是否加载成功,本质上是读取/proc/modules文件中的内容打印

另外模块加载成功后,在/sys/modules路径下也有该模块。进入到模块文件夹,tree -a可查看目录树(有什么用?)

 

 

模块卸载

rmmod hello

 

总结:

学会了简单模块的编写

了解了加载模块Makefile文件的编写,此方面还有待学习。听说有个《跟我一起写Makefile》的资料不错,看下啊

学习了模块加载卸载相关内容

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值