Linux驱动程序编写

驱动程序功能简介:

1.无操作系统 驱动程序实现应用程序和硬件的隔离,模块化的方式,提高复用率和安全性,实现高内聚低耦合的要求
  有操作系统 驱动程序 实现内核和硬件的隔离,提供统一的接口至内核,内核提供统一的接口至应用程序
2.驱动程序直接通过内核操作硬件或直接操作硬件
3.驱动设备有三大类:字符设备;块设备;网络设备。


简单实例:

0.选择对应的系统的版本,本人使用的是3.14.38

1.获取Linux内核源代码linux-3.14.38.tar.bz2,解压至当前目录,
2.在linux-3.14.38 目录下 执行 make 执行,config文件根据对应的系统进行 配置
3. 执行make modules 和make modules_install
4. 生成内核树 /lib/modules/3.14.38_6UL_ga/  ,此内核已经被发布者修改,适用于对应的嵌入式开发板
5. /lib/modules/3.14.38_6UL_ga/build 驱动程序编译时需要此目录


编写驱动程序,程序为通用实例 ,详见《Linux设备驱动程序》
//hello.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");


static int hello_init(void){
printk(KERN_ALERT "Hello, world/n");
return 0;
}


static void hello_exit(void){
printk(KERN_ALERT"Goodbye, cruel world/n");
}


module_init(hello_init);
module_exit(hello_exit);






Makefile文件必须命名为Makefile,不得使用makefie等名字
obj-m:=hello.o
KERNELDIR:=/lib/modules/3.14.38_6UL_ga/build  
PWD:=$(shell pwd)
modules:                                                                                         
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions *.order *symvers *~
        
        
$(MAKE) rm前必须以Tab开始


将hello.c和 Makefile文件放置同一目录下,打开命令行,执行make指令


即可生成对应的文件 hello.ko


将hello.ko拷贝至 嵌入式平台上, 执行 insmod hello.ko ,即可实现驱动程序的加载
可以看到 执行成功 ,输出 hello,world
卸载 即调用 rmmod hello.ko  即可。


本人的内核已经输出相应的信息。
printk是内核级别的函数,若没有看到对应的输出,可以输入 dmesg | tail 进行查看内核输出的最近10条信息
 dmesg | tail  -30  即可查看内核输出最近的30条信息
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值