学会linux驱动程序的步骤

第一步:建立linux驱动的骨架
linux内核使用驱动时候,需要先初始化,包括建立设备文件,分配内存地址空间等,退出的时候要释放资源,删除设备文件,释放内存地址空间等。所以在linux驱动中需要提供两个函数来分别处理驱动初始化和退出的工作,这两个函数分别用module_init和module_exit宏来指定,linux驱动一般都需要指定这两个函数,所以linux驱动有一个c文件,文件中包含处理驱动初始化和退出的函数,以及指定这两个函数的module_init和module_exit宏.
第二步:注册和注销设备文件
任何一个驱动都有设备文件,misc_register,misc_deregister
第三步:指定与驱动相关的信息
驱动程序带自描述内容,比如用modinfo可以获取包括作者名称,版本号等等,有module_author,module_license,module_alias,module_description等宏
第四步:指定回调函数
linux驱动的各个动作也可称为事件,这些时间就有相应的回调函数,
第五步:编写功能逻辑
编写程序,来实现该驱动所要求达到的功能,可以由多个函数/多个文件/甚至多个模块组成
第六步:编写makefile
一个新的驱动程序必须要有一个makefile,obj-m表示将驱动作为模块编译,obj-y则表示将驱动编译进内核,
echo 'obj-m := led.o' > makefile
上句表示新建一个makefile文件,文件中只有一个话:obj-m := led.o
该句表示用make指令编译时,会将源代码目录中的led.c或led.s文件编译成led.o文件,并且led.o会被编译进led.ko文件,然后使用insmod或modprobe命令来装载led.ko.如果使用的不是obj-m,而是obj-y,则led.o将会被编译进build-in.o,最终被连接进内核。build-in.o是连接同一类程序的.o文件生产的中间目标文件。make menuconfig可以配置是否最终编译进内核。
如果驱动依赖其他程序,如process.c,data.c,则makefile需要按如下写:
obj-m := led.o
led-y := process.o data.o
依赖文件由module-y或module-objs决定,module就是指led。
第七步:编译驱动程序
可以直接将驱动编译进内核,也可以作为模块单独编译
第八步:安装/卸载驱动
将驱动编译进内核,则只要linux使用该内核,则驱动将自动加载。如果不编译进内核,而是以模块存在,在需要使用insmod或modprobe命令来装载驱动模块,用rmmod命令来卸载驱动模块。

PCB原材料分析!原材料价格变化对PCB企业的影响
红米pro2什么时候上市?小米5X和MIUI9的发布会上,神秘惊喜将是红米Pro2?
华为手机用户为啥子越来越多?苹果功不可没
新能源规定迫使液晶电视设计出现变化,背光将节省大量能源
解剖“吃鸡”架构 论区块链纵横 三七互娱携手iTechclub举办“2018游戏技术趋势沙龙”
学会linux驱动程序的步骤
2013年半导体众生相:“存储”是行业增长强心剂
新型“扩散式忆阻器”可逼真模拟突触行为
智行者参与国家十三五车载计算通信平台底层软件以及操作系统研发项目
fireflyCORE-PX30-JD4编译Buildroot 固件简介
民营非制冷红外探测芯片如何实现国产替代
戴上口罩也能识别人脸?伊朗推出身份识别系统
示波器测量发动机双可变气门正时信号
锤子坚果Pro最新消息:罗永浩亲自回应锤子新机具体信息,或在4月25日发布?
基于RFID技术的无线门禁系统如何实现
荣耀9X和联想Z6哪个好,配置与价格的对比
Gradle入门知识之Gradle详解(下)
华为发布Watch GT智能手表,厚度仅10.6mm,续航能力超强
如何最大限度地延长汽车电池组的运行时间
AGMX2手机怎么样?AGMX2还值得纪念吗?