刚学习Linux字符设备驱动,第一个globalmem程序,基本一边了解,一边抄写。写完后,make的时候出现如下问题:
globalmem.c:99: 错误:程序中有游离的 ‘\343’
globalmem.c:99: 错误:程序中有游离的 ‘\200’
globalmem.c:99: 错误:程序中有游离的 ‘\200’
这应该是linux下c编程比较常见的问题,原因是
1.程序中输入的字符: , ; " ' / 等符号,有可能是使用的中文输入发输入的
2.程序中有使用全角拼音的现象
解决方法:把程序完全用 英语输入,半角输入运行正常
解决上述问题后,编译通过,加载模块时出现错误如下:
device or resource busy
网上查后得知是
分配的主设备号254冲突,
修改之后即正常加载。
加载成功后,可以通过cat /proc/devices 查看,
# cat /proc/devices Character devices: 1 mem 4 /dev/vc/0 4 tty 4 ttyS 5 /dev/tty 5 /dev/console 5 /dev/ptmx 88 globalmem 99 ppdev 253 vmci 254 pcmcia
的确,254设备号被占用。但同时也发现有的设备号可以重用,还不明白为什么,有知道的麻烦告诉我一声。
测试驱动程序
首先应该在/dev/目录下创建与该驱动程序对应的文件节点,用如下命令创建:
[root@localhost dev]# mknod globalmem0 c 88 0
然后进行简单的测试,如下:
[root@localhost dev]# echo 'My first char device' > globalmem0 [root@localhost dev]# cat globalmem0 My first char device