linux驱动:(4)直接编译驱动进内核

接前面第一章的第二个编译驱动方法

先分析一下下面的代码

source "drivers/redled/Kconfig"
config LED_4412
    tristate "Led Support for GPIO Led"
    depends on LEDS_CLASS
    help
    This Option enable support for led
  • 第一行代码,他会包含这个路径下的驱动文件,方便我们界面配置选项管理
  • 第二行代码,配置选项的名称,他前面隐藏了,全民为CONFIG_LED_4412
  • 第三行代码,tristate表示驱动在界面上有3种状态,第三章有写
    • 与之对应的有bool,表示在界面上只有2种状态,少了一种编译成模块
    • 后面双引号的是选项的名字,显示在界面上的
  • 第四行代码,例如 A depends on B 表示只有在选择B后才能选A,表示依赖于B
    • 与之对应的有select,反向依赖,A选中时B也会同时选中
  • 第五行和第六行代码,帮助信息

仿写一个helloworld驱动

步骤

  1. 进入linux源码根目录下的drivers目录下的char目录
  2. 新建一个helloworld文件夹,把第一章写的驱动文件放进来
  3. 新建一个Kconfig文件
  4. 仿照例子修改Kconfig文件
    config HELLOWORLD
        tristate "helloworld"
        help
        hello hello
  5. 新建一个Makefile文件, 下面的CONFIG_HELLO是由Kconfig中的第一行代码所决定
    obj-$(CONFIG_HELLOWORLD)+=helloworld.o
  6. 在char目录下,找到并修改Makefile文件,加入下面一行代码
    obj-y += helloworld/
  7. 在char目录下,找到并修改Kconfig文件,加入下面一行代码
    source “drivers/char/helloworld/Kconfig”
  8. 返回根目录输入命令make menuconfig
  9. 进入Character devices目录里就可以找到helloworld了,可以用空格修改三种状态
  10. 如果选中后,然后在.config里搜索HELLOWORLD,就会找到CONFIG_HELLOWORLD=y
    1. 如果想直接修改相关的驱动,可以直接改.config,但不推荐,如果直接修改.config,但该驱动有依赖,就会修改不成功
  11. 进入内核根目录底下的编译脚本create.sh,可以看到前面有make xxx_defconfig,表示会自动寻找arch/arm/conflags中的xxx_defconfig配置文件编译的
  12. 根目录输入命令make distclean,清除所有的编译文件
  13. 把根目录下的.config删掉,把arch/arm/conflags中的xxx_defconfig配置文件替换为.config
  14. 然后进入make menuconfig界面选择helloworld,如果选中后,然后在.config里搜索HELLOWORLD,就会找到CONFIG_HELLOWORLD=y
  15. 把arch/arm/conflags中的xxx_defconfig配置文件修改名字为xxx_defconfig_nohello
  16. 再将根目录底下的.config复制为xxx_defconfig作为修改后的配置文件,以后直接运行脚本就会把拥有helloworld的配置文件进行编译
  17. 运行create.sh脚本进行编译
  18. 如果编译成功就去到drivers/char/helloworld看看有没有将helloworld.c编译成.o
  19. 再确定arch/arm/boot/下面有没有生成zImage镜像
  20. 将zImage烧录到板子上
  21. 在开机的时候查看开机启动信息有没有打印helloworld

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值