linux 驱动程序入门 helloworld.ko

<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:14px;"></span></span><pre name="code" class="cpp">
#include <linux/kernel.h>
 
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:14px;">#include <linux/module.h></span></span>
<span style="font-size:14px;">
#static int nbr =2;
#module_param(nbr, int, S_IRUGO)

void hello(void)
{ 
printk(KERN_DEBUG "[kernel space] begin kernel_receive\n");
}

int __init hello_init(void)
{
hello();
}

void __exit hello_exit(void)
{
printk(KERN_DEBUG "test_netlink_exit!!\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("xiahzp@hdu");

#MODULE_DESCRIPTION(模块用途的简单描述);

#MODULE_VERSION(模块的版本字符串);
#MODULE_ALIAS(模块的别名);</span></span>


源文件编辑好后,可以写一个Makefile 用来编译模块

Makefile:
obj-m += hello.o    #module name
modules-objs	:=hello.o      #obj files need to make module
KDIR := /lib/modules/`uname -r`/build
PWD :=$(shell pwd)
default:
	make -C $(KDIR)  M=$(PWD) modules
clean
	rm -rf  *.o *.cmd *.ko *.mod.c .tmp_versions

插入模块:insmod

卸载模块:rmmod 

查看信息: dmesg | tail -12


查看可用参数: ls /sys/module/hello/parameters

带参数加载模块:insmod hello.ko nbr=200

显示模块信息: modinfo hello.ko

小结:

在写到module_param(nbr, int, S_IRUGO) 的时候,你应该想到还有:

EXPORT_SYMBOL(name) ;   /* 可以导出模块的函数,这也是模块编写的最终目的 */

在用到insmod 和 modinfo 的时候, 你应该想到还有:

depmod               /* 分析可加载模块的依赖性,并生成modules.dep文件和映射文件 */

modeprobe   /* Linux 内核添加删除模块 */

实际上编译驱动的时候是使用预先提供的一个makefile 的,位置在:

/lib/module/`uname -r`/build/Makefile







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值