驱动程序已经编译好了,现在把它安装到系统中去。

$ insmod ?–f ?test.o

如果安装成功,在 /proc/devices 文件中就可以看到设备 test,并可以看到它的主设备号。要卸载的话,运行 :

$ rmmod test

下一步要创建设备文件。

mknod /dev/test c major minor

c 是指字符设备,major 是主设备号,就是在 /proc/devices 里看到的。

用 shell 命令

$ cat /proc/devices

就可以获得主设备号,可以把上面的命令行加入你的 shell script 中去。

minor 是从设备号,设置成 0 就可以了。

我们现在可以通过设备文件来访问我们的驱动程序。写一个小小的测试程序。

#include 《stdio.h》

#include 《sys/types.h》

#include 《sys/stat.h》

#include 《fcntl.h》

main()

{

int testdev;

int i;

char buf[10];

testdev = open(“/dev/test”,O_RDWR);

if ( testdev == -1 )

{

printf(“Cann’t open file \n”);

exit(0);

}

read(testdev,buf,10);

for (i = 0; i 《 10;i++)

printf(“%d\n”,buf[i]);

close(testdev);

}

编译运行,看看是不是打印出全 1 ?

以上只是一个简单的演示。真正实用的驱动程序要复杂的多,要处理如中断,DMA,I/O port 等问题。这些才是真正的难点。上述给出了一个简单的字符设备驱动编写的框架和原理,更为复杂的编写需要去认真研究 LINUX 内核的运行机制和具体的设备运行的机制等等。希望大家好好掌握 LINUX 设备驱动程序编写的方法。

07

嵌入式驱动的结构分析

在 Linux 系统上编写驱动程序,说简单也简单,说难也难。难在于对算法的编写和设备的控制方面,是比较让人头疼的;说它简单是因为在 Linux 下已经有一套驱动开发的模式,编写的时候只需要按照这个模式写就可以了,而这个模式就是它事先定义好的一些结构体,在驱动编写的时候,只要对这些结构体根据设备的需求进行适当的填充,就实现了驱动的编写。

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查