/* AUTHOR: Pinus
* Creat on : 2018-10-11
* KERNEL : linux-4.4.145
* BOARD : JZ2440(arm9 s3c2440)
* REFS : 韦东山视频教程第二期
《LINUX内核源码情景分析》
*/
设备驱动概述
计算机最基本的三个物质基础就是CPU、内存以及设备,设备驱动顾名思义,就是用来操作设备的,向下操作具体硬件,向上给应用提供接口。Linux内核经过多年发展,自然已经形成了足够合理有效的结构体系,不能像我们写裸板程序时一样只追求功能的实现,还要遵循Linux的代码结构。
实验
目的:编译出可以安装和卸载的模块驱动,打印hello word
1. 包含头文件,写出入口和出口函数,添加必要协议和修饰
头文件 :直接找其他内核的驱动文件拷过来,缺少编译时再添加
定义入口和出口函数 :模块在安装时会执行的函数
添加协议和修饰:
module_init(first_drv_init); /* 告诉内核哪个使我们的入口出口函数 */
module_exit(first_drv_exit);
MODULE_LICENSE("GPL"); /* 遵循GPL开源软件协议 */
2. 编写出入口出口函数
int first_drv_init(void)
{
printk(KERN_EMERG"first_drv insmod \n hello world");
return 0;
}
void first_drv_exit(void)
{
printk(KERN_EMERG"first_drv rmmod\n");
}
3. 编译驱动,将生成的.ko文件,拷贝到板子上
insmod first_drv.ko //挂载
>打印出 first_drv insmod
hello world
lsmod //查询当前挂载
first_drv ... ... ...
rmmod first_drv //卸载
>打印出 first_drv rmmod
这一篇只是个引子,相信这些基础大家都知道,只是本人强迫症,不从开始写就浑身难受。。。