3、在串口终端上,加载驱动模块和测试驱动程序;
mount:挂载虚拟机的/home目录到开发板的/tmp/led目录下;
insmod:加载模块;
mknod:创建设备节点;
rmmod:卸载模块;
led.ko:led设备驱动模块。
实验结果:在终端打印出“...."的同时,LED从D12~D9相继亮灭(流水灯)。
总结:整个LED驱动开发并不算难,如果有了裸机编程的基础,加上一定的Linux基础,上手会更加容易。期间也碰到不少疑问,而最后大部分也都得到了解答。总之,基础还是很重要的,理论+实践才是王道。
ps:曾经尝试调用内核中的s3c2410_gpio_cfgpin()和s3c2410_gpio_setpin()两个函数来实现端口输出配置和向数据寄存器写数据,但会出现下面这个问题:
s3c2410_gpio_cfgpin()和s3c2410_gpio_setpin()这两个函数在/arch/arm/mach-s3c2410/gpio.c文件中定义,在asm-arm/arch-s3c2410/hardware.h中extern声明,最初编译时警告说这两个函数是”undefined“的,后来我在gpio.c文件中添加EXPORT_SYMBOL(s3c2410_gpio_cfgpin);EXPORT_SYMBOL(s3c2410_gpio_setpin);导出符号,却出现“no CRC”这个警告,这个问题已经折腾我好几天了,求高手解答。