当前位置:   article > 正文

如何把自己写的驱动编进内核_编写一个字符设备驱动,编译进内核驱动

编写一个字符设备驱动,编译进内核驱动

怎么把驱动编进内核?

  • 本文详细介绍了如何将自己编写的驱动代码放入内核整体框架下。

1. 将自己的驱动源码拷贝进内核相应的文件夹

  • 为便于说明,此处以字符设备驱动my_led.c为例,需要复制到~/linux-3.4.2/drivers/char(此处假设内核源码目录linux-3.4.2位于用户家目录)。

    cp my_led.c ~/linux-3.4.2/drivers/char
    
    • 1

2. 修改char目录下的Makefile

  1. 打开Makefile
# 位于~/linux-3.4.2/drivers/char
vim Makefile
  • 1
  • 2
  1. 在文件顶端或尾端添加如下语句,添加自己编写的目标文件my_led.o:

    obj-$(CONFIG_MY_LED)	+= my_led.o			//需要通过用户自定义配置时
    或者采用
    obj-y	+= my_led.o							//不需要通过用户配置,必须编译进内核
    
    • 1
    • 2
    • 3

3. 修改char目录下的Kconfig文件

  • 打开Kconfig

    # 位于~/linux-3.4.2/drivers/char
    vim Kconfig
    
    • 1
    • 2
  • 在文件顶端或尾端添加如下语句,以后在执行menuconfig时可以在相应菜单中找到"My led driver support"选项,其作用就是确定(配置)CONFIG_MY_LED的值(y、m、n):

    config MY_LED
           tristate "My led driver support"
           default n
           help
             If you want to add LED function 
             say Y or M here, otherwise say N
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 当然你也可以选择bool类型(y或n),更加详细的语法可以参考内核文档,内核文档位置位于内核根目录下的/Documentation/kbuild/kconfig_language.txt

4. 设置交叉编译环境

export ARCH=arm	//设置目标板架构为ARM,否则生成的目标文件将不被目标板识别
export CROSS_COMPILE=arm-linux-				//设置交叉编译工具链前缀
export PATH=$PATH:/usr/local/arm/4.3.2/bin	//添加交叉编译工具链所在bin目录
  • 1
  • 2
  • 3

5. 内核顶层目录下执行make menuconfig,进入图形化配置界面:

  1. 一般进入图形化配置界面前,首先会执行某开发板特定的或者近似的默认配置文件,这些配置文件存放于内核的arch/arm/configs/文件夹下。

    image-20220906221407846

    • 假设我们的开发板配置与s3c2410_deconfig最为相似,则可以执行make s3c2410_deconfig。其作用就是将s3c2410_deconfig文件重新复制一份,并命名为.config后移动到内核顶层目录下。此后,进行内核编译时,就以此文件内容决定将哪些模块编译进内核,哪些模块编译为模块,哪些不需要编译。
  2. 进入图形化配置界面,查验是否存在MY_LED的配置菜单项:

    • 执行make menuconfig进入配置界面

    • 执行/MY_LED,查看我们添加的菜单项位置

      image-20220906222532394

    • 可以看到,我们添加的菜单项已经成功添加,此后可以像内核其它模块一样选择编译类型

      image-20220906222741352

      • 保存退出后,我们刚才的选择结果保存于顶层目录下的.config文件中。

mg-YkNQ4PAl-1662479891610)]

    - 保存退出后,我们刚才的选择结果保存于顶层目录下的`.config`文件中。

      ![image-20220906223143427](https://img-blog.csdnimg.cn/img_convert/fd8d16280231b0be0084408caa564b4c.png)
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/744584
推荐阅读
相关标签
  

闽ICP备14008679号