就是直接把驱动放到内核中,成为内核中的一部分。把写好的驱动源代码(led.c文件)放到,内核的字符驱动中(路径为:linux-2.6.32.2/drivers/char ),然后修改下配置;
修改文件Kconfig(vim linux-2.6.32.2/drivers/char/Kconfig)
往里面添加:
config MY2440_LEDS
tristate "Leds driver yzh"(在make menuconfig时显示的驱动模块名称)
depends on ARCH_S3C2440 (如果选择了这个配置,表示只有在s3c2440系统上才会出现这个选项)
default y
---help---
myLeds yuzhihui
修改上面一部分只是在make menuconfig时能够有相应的选项来给用户选择是否加载这个驱动模块;
选择模块步骤(也就是编译内核步骤):
make menuconfig(在这之前要把开发板内核对应的屏幕配置文件修改成.config文件,比如:cp config_mini2440_x35 .config)
1、如果在Kconfig中添加配置时选择了depends on ARCH_S3C2440,那么这里要先进入:system type --> 选择你依赖的平台。如果没有添加那句话,则这里可以省略;
2、依次进入:Device Drivers --->> Character devices --->> <*> Leds driver yzh (这时候就会有你上面添加的模块选项)
修改文件Makefile(vim linux-2.6.32.2/drivers/char/Makefile)
往Makefile中添加句:obj-$(CONFIG_MY2440_LEDS) += myLed.o;其中CONFIG_MY2440_LEDS是根据上面Kconfig中来的,myLed.o 则是根据你的源文件:myLed.c来的。
当上面make menuconfig后可以到 .config中看看会有句:CONFIG_MY2440_LEDS=y ;表示已经选中了这个模块编译到内核中去了;
当make menuconfig 顺利选择模块后,就开始编译内核了,命令:make zImage;
最后到 /arch/arm/boot/中找到zImage就是编译后的内核了;
直接在宿主机中用Makefile把驱动源代码编译成 .ko文件,然后通过nfs服务器拷贝到开发板中,直接用insmod加载进去就可以了。
测试:
首先可以用命令:cat /proc/devices 来查看下已经加载的驱动,并且显示主设备号和次设备号
接着在/dev下创建一个设备节点:mknod yzhChar c 250 0;mknod 表示创建的是设备节点;yzhChar 表示该设备文件的名称(当测试是用open打开该文件);c 表示是字符设备文件;250 表示是主设备号;0 表示是次设备号;
如果测试程序就可以把/dev/yzhChar当作一个普通文件来读写操作。
sscanf("123456","%s",buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中!