加入内核源码树外

① 建立两个文件scull.cscull.h,以及Makefile文件

Makefile文件

 Linux符设备驱动编程

② 用make进行编译,生成scull.ko驱动程序模块

 Linux符设备驱动编程

Linux符设备驱动编程

 ③ 把scull.ko模块加载到内核,并且查看scull.ko驱动

 Linux符设备驱动编程

④ 查看当前设备使用的主设备号,主设备号为260

 Linux符设备驱动编程

⑤ 首先应该在/dev/目录下创建与该驱动程序相对应的文件节点,查看创建好的驱动程序节点文件并修改scull的权限。

 Linux符设备驱动编程

⑥ 编写test.c程序,来对驱动程序进行测试。编译并执行该程序

 Linux符设备驱动编程

移除驱动模块

 Linux符设备驱动编程

加入内核源码树里面

 ① 把驱动程序(模块程序)拷贝到内核源码树根目录下/drivers/char下

 Linux符设备驱动编程

② 编译配置文件Kconfig,加入驱动选项,使之在make menuconfig的时候出现改模块选项

 Linux符设备驱动编程

③ 在内核根目录下执行make menuconfig

 Linux符设备驱动编程

④ 没有安装curses库,安装。

 Linux符设备驱动编程

⑤ 在内核根目录下执行make menuconfig,找到驱动模块,设置启动为M

 Linux符设备驱动编程

⑥ 在模块文件所在目录的Makefile中加入要编译的驱动模块文件

 Linux符设备驱动编程

Linux符设备驱动编程

⑦  在源代码根目录linux下,执行make bzImage后执行make modules

 Linux符设备驱动编程

⑧  在char目录下查看得知device1.ko已经存在

 Linux符设备驱动编程

⑨  lsmod指令安装模块文件,再对驱动程序进行测试。编译并执行该程序

 Linux符设备驱动编程

代码:

 1 #ifndef _MEMDEV_H_
 2 #define _MEMDEV_H_
 3 
 4 #ifndef MEMDEV_MAJOR
 5 #define MEMDEV_MAJOR 260 /*预设的mem的主设备号*/
 6 #endif
 7 
 8 #ifndef MEMDEV_NR_DEVS
 9 #define MEMDEV_NR_DEVS 2 /*设备数*/
10 #endif
11 
12 #ifndef MEMDEV_SIZE
13 #define MEMDEV_SIZE 4096
14 #endif
15 
16 /*mem设备描述结构体*/
17 struct mem_dev 
18 { 
19   char *data; 
20   unsigned long size; 
21 };
22 
23 #endif /* _MEMDEV_H_ */
scull.h

相关文章:

  • 2021-08-17
  • 2021-12-23
  • 2021-09-20
  • 2022-12-23
  • 2021-12-05
  • 2021-12-05
  • 2021-09-20
猜你喜欢
  • 2021-09-20
  • 2022-12-23
  • 2021-10-19
  • 2022-01-10
  • 2021-11-13
  • 2021-11-15
相关资源
相似解决方案