以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。
驱动集成到内核的概念
驱动开发的步骤一般是:
(1)以模块的形式在内核外部编写与调试
(2)将调试好的驱动代码集成到kernel中
之前我们编写的驱动代码都是以模块的形式进行安装与卸载(自己写Makefile进行编译),这样可以方便调试与开发。
如果驱动代码的功能确认无误后,可以将驱动代码集成到kernel中,然后在内核配置阶段决定如何编译,这样有利于集成。
比如DM9000已经集成在内核中了,可以在menuconfig时配置。
将驱动集成到内核的步骤
步骤关键点:Kconfig、Makefile、make menuconfig。
以下步骤在/home/xjh/iot/embedded_basic/kernel/x210_kernel中进行。
步骤一:将写好的驱动源文件放入内核源码中正确的目录下。
比如把这次编写的LED驱动 leds-s5pv210.c 放在/drivers/leds/目录中。
步骤二:在/drivers/leds/目录的Makefile中添加相应的依赖。
obj-$(CONFIG_LEDS_DELL_NETBOOKS) += dell-led.o obj-$(CONFIG_LEDS_MC13783) += leds-mc13783.o# 添加下面这行内容 # CONFIG_LEDS_S5PV210 = y 表示集成到内核 # CONFIG_LEDS_S5PV210 = M 表示编译成模块 # CONFIG_LEDS_S5PV210 = N 表示不编译整个 0bj-$(CONFIG_LEDS_S5PV210) += leds-s5pv210.o# LED SPI Drivers obj-$(CONFIG_LEDS_DAC124S085) += leds-dac124s085.o
步骤三:在/drivers/leds/目录的Kconfig中添加相应的配置项。
因为make menuconfig的原理是读取Kconfig中的信息,这里要显示对应的配置项目,则需要添加相应内容。
comment "LED drivers"# 添加下面这个配置项目 config LEDS_S5PV210tristate "LED Support for s5pv210(x210)"helpThis option enables support for on-board LED drivers on x210.
步骤四:make menuconfig。
以y为示例,此时会被编译进去;若以M,则不会被编译进去,而是被编译成单独的模块;若以N,则不被编译。
选择y之后保存,在内核源码主目录的.config文件中会出现如下内容:
# # LED drivers # CONFIG_LEDS_S5PV210=y # CONFIG_LEDS_PCA9532 is not set # CONFIG_LEDS_GPIO is not set # CONFIG_LEDS_LP3944 is not set # CONFIG_LEDS_PCA955X is not set
步骤五:编译与下载至开发板运行,测试结果。
[root@xjh ~]# cd /sys/class [root@xjh class]# ls backlight i2c-adapter misc regulator scsi_host video4linux bdi i2c-dev mmc_host rfkill sound vtconsole block ieee80211 mtd rtc spi_master firmware input net s3c_bc switch gpio lcd power_supply scsi_device timed_output graphics leds ppp scsi_disk tty hidraw mem pvr scsi_generic vc [root@xjh class]# cd leds/ [root@xjh leds]# ls //开机就存在了 led1 led2 led3 mmc0:: mmc1:: mmc2:: mmc3:: [root@xjh leds]# cd led1 [root@xjh led1]# ls brightness max_brightness power subsystem uevent [root@xjh led1]# cat brightness 255 [root@xjh led1]# echo 1 > brightness [ 87.856381] s5pv210_led1_set [root@xjh led1]#