这几天都在搞步进电机在mini2440下linux系统的驱动。下面做个总结,也记录一下过程,供以后回顾。
首先把驱动的主要C文件写好,我命名是step_motor.c。在编译进内核之前,应该先通过编译成模块测试一下效果。我用环境是虚拟机+fedora9,先把mini2440开发板的内核文件压缩包放进linux系统下,然后解压打开,会发现里面有着几个config文件,分别对应不同参数的开发板。我的开发板是w35的,所以就选择config_mini2440_w35。先用指令cp config_mini2440_w35 .config把该文件设置为编译内核的config文件,然后就make。
编译成功后就就是编译step_motor.c文件了。创建一个文件夹,把step_motor.c放进去,然后新建一个Makefile文件,注意第一个字母要大写。然后按照编译模块的规则写该文件,可以上网百度一下,我写的是这样的
ifneq ($(KERNELRELEASE),) obj-m :=led_linux.o else KDIR := /home/Chri/linux-2.6.32.2 all: make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux- arm-linux-gcc led_test.c -o led_test clean: rm -f *.ko *.o *.mod.o *.mod.c *.symvers endif
其中那个KDIR那里是刚才编译成功的内核文件的路径,编译的模块会根据这个内核来生成。写好之后就一个make,假如文件没有写错的话就会生成名称对应的模块文件step_motor.ko,接着要做的就是把整个文件夹放到开发板上面了。
使用指令insmod step_motor.ko把模块动态加载到开发板中,然后输入lsmod,查看是否有着自己的模块。成功加载后,打开文件cat /proc/devices,查看一下自己添加的设备的设备号,假如为253,那么我们就可以添加设备了mknod /dev/step_motor c 253 1,添加一个字符型设备。这时候我们查看一下 ls /dev ,就可以看到设备列表中有着我们自己添加的step_motor。这时候我们就可以把自己编写的测试文件来测试一下设备运作是否正常。
测试成功后,我们就可以把模块编译到内核中去了。首先还是先用指令cp config_mini2440_w35 .config。然后把编写好的step_motor.c放到 内核文件夹的/drivers/char里,因为我们添加的是字符型设备。然后改写改目录下的Kconfig文件,添加
config STEP_MOTOR
tristate "step_motor"
然后修改Makefile文件,添加以下代码
obj-$(CONFIG_STEP_MOTOR) +=step_motor.o
返回到根目录下,make menuconfig可以查看一下自己的设备是否有显示。然后输入make zImage ARCH=arm CROSS_COMPILE=arm-linux- ,等待一段时间后就会编译完。然后在内核目录中打开/arch/arm/boot,就会找到编译好的zImage,通过DNW把镜像下载到开发板的内核中就OK。在超级终端中ls /dev查看一下就会发现自己的设备已经出现在列表当中。
本文应该还有许多疏忽的地方,欢迎大家纠正。