刚学习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