linux helloworld驱动程序,linux 驱动程序入门 helloworld.ko

#include

#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(模块的别名);

源文件编辑好后,可以写一个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值