连接开发板和PC,然后打开S3C开发板的电源开关,成功启动后,执行build.sh脚本文件编译和安装LED驱动。build脚本文件会自动将驱动的.ko文件上传到S3C开发板并安装。
LED驱动会建立一个/dev/s3c5410_leds设备文件,该Linux驱动可以控制4个LED。通过向/dev/s3c6410_leds发送长度为1到4的字符串可以控制这4个LED的开关。也可以执行test_leds.sh脚本文件测试LED。
创建LED驱动的设备文件:1、使用cdev_init函数初始化cdev;2、指定设备号:Linux设备文件的设备号分为主设备号和次设备号,用1个int类型表示,其中前12为表示主设备号,后20位表示次设备号。设备号的指定由直接在代码中指定和动态分配两种方法。3、使用cdev_add函数将字符设备添加到内核中的字符设备数组中;4、使用class_create宏创建struct class;使用device_create函数创建设备文件。
卸载LED驱动的设备文件:依次调用device_destory、class_destory和unregister_chrdev_region方法。
在驱动中可以有两种方法控制LED,通过字符串和通过I/O命令控制。
由此看出一个完整的Linux驱动程序是由内部处理和硬件交互两部分组成的。其中内部处理主要是指Linux驱动的装载、卸载、与设备文件相关的动作处理以及业务逻辑等。与硬件交互主要是指通过iowrite32、ioread32等函数与硬件中的寄存器进行数据交互。如果在不同Linux内核版本之间的移植,主要是移植第一部分。