把驱动编译进内核

  1. 驱动路径
  • 通常,linux kernel的驱动文件都放在 drivers/ 里面,根据不同驱动类型放置在不同文件里, 如字符设备驱动 放置在 drivers/char/ 文件夹下。
    这里,自己创建一个文件夹 para_drv,用来放自己的驱动文件, 具体文件构成如:
		drivers/para_drv/Makefile
		drivers/para_drv/Kconfig
		drivers/para_drv/dtsled/para_dtsled.c
		drivers/para_drv/dtsled/Makefile
		drivers/para_drv/dtsled/Kconfig
		drivers/para_drv/irq_key/para_irq_key.c
		drivers/para_drv/irq_key/Makefile
		drivers/para_drv/irq_key/Kconfig
	以上, Kconfig用于图形化配置,执行 make menuconfig时会被调用,最终会体现在内核的 .config里。
  1. Kconfig文件
  • 在 drivers/Kconfig 里包含 drivers/para_drv/Kconfig 文件
    在 drivers/Kconfig 倒数第2行添加以下:
source "drivers/para_drv/Kconfig"
  • 在 drivers/para_drv/Kconfig 里包含drivers/para_drv/dtsled/Kconfig 和 drivers/para_drv/irq_key/Kconfig 文件
在 drivers/para_drv/Kconfig添加以下:
			menu "para devices"
			
			source "drivers/para_drv/dtsled/Kconfig"
			source "drivers/para_drv/irq_key/Kconfig"  

			endmenu

  • 编写 drivers/para_drv/dtsled/Kconfig
#
# para_dtsled
#

config PARA_DTSLED
	tristate "PARA_DTSLED driver"
	default y
	help
	Support for PARA_DTSLED driver.

  • 编写 drivers/para_drv/irq_key/Kconfig 文件
#
# para_irq_key
#

config PARA_IRQ_KEY
		tristate "PARA_IRQ_KEY driver"
		default y
		help
			Support for PARA_DTSLED driver.

  1. Makefile文件
  • 在 drivers/Makefile 里包含 drivers/para_drv/Makefile 文件
    在 drivers/Makefile 最后添加以下:
obj-y	+= para_drv/
  • 编写 drivers/para_drv/Makefile
#
# Makefile for the kernel para's device drivers.
#

	obj-y				+= dtsled/
	obj-y				+= irq_key/
  • 编写 drivers/para_drv/dtsled/Makefile 和 drivers/para_drv/irq_key/Makefile
    drivers/para_drv/dtsled/Makefile:
    CONFIG_PARA_DTSLED 在 kernel的 .config 文件里, 从 Kconfig 文件里产生
obj-$(CONFIG_PARA_DTSLED)	+= para_dtsled.o 

drivers/para_drv/irq_key/Makefile:
CONFIG_PARA_IRQ_KEY 在 kernel的 .config 文件里, 从 Kconfig 文件里产生

obj-$(CONFIG_PARA_IRQ_KEY) := para_irq_key.o
  1. 配置内核
  • 在 kernel 根目录下执行 make menuconfig, 如下图在这里插入图片描述

  • 选择 Device Drivers->para device, 其中 para device 在drivers/para_drv/Kconfig 里在这里插入图片描述

  • Device Drivers->para device 菜单里 出现两个条目 PARA_DTSLED driver 和 PARA_IRQ_KEY driver 分别定义在对应的 Kconfig文件里。这两个条目前的 <> 有三个选项:

  • 空: 不选,–> .config 里:CONFIG_PARA_DTSLED is not set,make 内核时不会编译对应的文件
    M:编译成模块–> .config 里: CONFIG_PARA_DTSLED=m
    make 内核时会调用模块对应的 Makefile文件(如/drivers/para_drv/irq_key/Makefile),并在/drivers/ 下 各Makefile 同级目录下生成在modules.order 和 modules.builtin文件, 同时在各级modules.order里自动生成 kernel/drivers/para_drv/dtsled/para_dtsled.ko, 表示编译成了模块 。
    *: 编译进内核 –> .config 里: CONFIG_PARA_IRQ_KEY=y, make 内核时会调用模块对应的 Makefile文件(如/drivers/para_drv/irq_key/Makefile),并在/drivers/ 下各Makefile 同级目录下生成在modules.order 和 modules.builtin文件, 同时在modules. builtin里自动生成 kernel/drivers/para_drv/irq_key/para_irq_key.ko, 表示编译进了内核 。
    在这里插入图片描述

.config 文件截图在这里插入图片描述

  1. 编译内核并验证
  • 在内核根目录下执行 :
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16

ARCH=arm: 目标处理器的架构
CROSS_COMPILE=arm-linux-gnueabihf-: 指定交叉编译链

  • 最终编译出的内核文件为: arch/arm/boot/zImage
  • 将zImage 烧录到目标板, ls /dev, 会发现已经编译进内核的驱动(或者在内核启动log里查找驱动文件里的log)。
    内核启动log里对应的驱动打印及驱动源码:在这里插入图片描述
    在这里插入图片描述
    驱动名及执行 ls /dev:在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值