1:在linux系统中,驱动程序通常采用内核模块的结构来编码。因此编译、安装一个驱动程序实际上就是编译、安装一个内核模块。
2:通过字符设备文件,应用程序可以使用相应的字符设备驱动程序来控制设备。创建字符设备文件的方法一般有两种:
1:使用mknod命令
mknod /dev/文件名 c 主设备号 次设备号
c:代表是字符设备文件,char的缩写
主设备号:字符设备文件和设备驱动程序之间的联系就是通过主设备号来建立 的。
次设备号:取0-255之间非0的值就可以。
注意:在创建字符设备文件的时候要根据已经安装好的驱动程序的设备号来确定 使用mknod时的主设备号的值,两者要保持一致。
例:mknod /dev/memdev0 c 253 0
2:使用函数在驱动程序中创建
3:编写应用程序来使用字符设备驱动。
注意以下语句:
int fd = 0;
fd = open("/dev/memdev0",O_RDWR);
打开memdev0这个设备。
编写应用程序在开发板上运行的时候如果遇到这个问题:
/binsh: ./***: not found
这种情况一般是编译时有动态库,而开发板上没有动态库。可以使用下面这个命 令来查看:
arm-linux-readelf -d ***
解决的方法有两种:
一种是把编译时使用的动态库拷贝到开发板上去。
另一种是使用静态编译:
#arm-linux-gcc -static ***.c -o ***
总结:
应用程序通过调用系统函数open write read等函数,来操作字符设备文件/dev/memdev0,然后文件memdev0通过对应的主设备号找到驱动程序,实现底层硬件的访问读写等等一系列操作。
2:通过字符设备文件,应用程序可以使用相应的字符设备驱动程序来控制设备。创建字符设备文件的方法一般有两种:
1:使用mknod命令
mknod /dev/文件名 c 主设备号 次设备号
c:代表是字符设备文件,char的缩写
主设备号:字符设备文件和设备驱动程序之间的联系就是通过主设备号来建立 的。
次设备号:取0-255之间非0的值就可以。
注意:在创建字符设备文件的时候要根据已经安装好的驱动程序的设备号来确定 使用mknod时的主设备号的值,两者要保持一致。
例:mknod /dev/memdev0 c 253 0
2:使用函数在驱动程序中创建
3:编写应用程序来使用字符设备驱动。
注意以下语句:
int fd = 0;
fd = open("/dev/memdev0",O_RDWR);
打开memdev0这个设备。
编写应用程序在开发板上运行的时候如果遇到这个问题:
/binsh: ./***: not found
这种情况一般是编译时有动态库,而开发板上没有动态库。可以使用下面这个命 令来查看:
arm-linux-readelf -d ***
解决的方法有两种:
一种是把编译时使用的动态库拷贝到开发板上去。
另一种是使用静态编译:
#arm-linux-gcc -static ***.c -o ***
总结:
应用程序通过调用系统函数open write read等函数,来操作字符设备文件/dev/memdev0,然后文件memdev0通过对应的主设备号找到驱动程序,实现底层硬件的访问读写等等一系列操作。