linux 内核驱动动态加载和静态加载和 .config makefile kconfig 三个文件之间关系

本文详细介绍了Linux内核驱动的静态编译和动态加载过程。首先,通过在用户目录下创建文件夹并编写Makefile和ledled.c实现静态编译,接着在特定内核版本下进行编译生成ko文件,并将其加载到开发板内核。然后通过insmod命令将驱动加入内核,创建设备文件,并编写应用层代码进行交互。动态加载过程中涉及make、mknod和insmod等命令操作。
摘要由CSDN通过智能技术生成

1 静态编译驱动进内核


  当我们编写完一个驱动后,我们要把它以模块形式编译或者直接编译进内核时,需要修改相关文件,其中最重要的便是kconfig ,makefile。
主要是分析一下三者之间的关系,然后就其语法简要的谈一下。
    当我们在内核源码目录下执行make命令时,实际上是根据makefile 来进行编译的。
    在mini2440开发板上编写了一个按键控制led灯的驱动。文件名为buttons_leds.c属于字符驱动,把buttons_leds.c加入/driver/char/目录下,然后在/driver/char/目录下的makefile部分最后添加一行
obj-$(CONFIG_BUTTONS_LEDS)      += buttons_leds.o

如下:
obj-y += mem.o random.o tty_io.o n_tty.o tty_ioctl.o  tty_ldisc.o tty_buffer.o tty_port.o
obj-$(CONFIG_BFIN_JTAG_COMM) += bfin_jtag_comm.o
obj-$(CONFIG_CONSOLE_TRANSLATIONS) += consolemap.o consolemap_deftbl.o
obj-$(CONFIG_HW_CONSOLE) += vt.o defkeymap.o
obj-$(CONFIG_AUDIT) += tty_audit.o
obj-$(CONFIG_BUTTONS_LEDS)    += buttons_leds.o
其中第一行obj-y  中的y表示编译进内核,而obj-$(CONFIG_BUTTONS_LEDS)  中CONFIG_BUTTONS_LEDS则表示一个变量,类似于我们C语言中的变量,用$( )来表示,它一般可以取三种值y ,m ,n。y表示编译进内核,而m则表示以模块的方式进行编译,n表示不编译进内核。obj-y    += 等号后面的.o后缀文件则是由该目录下的对应名称的.c文件编译而来。


上面CONFIG_BUTTONS_LEDS变量的取值则是通过.config文件来集中赋值的。
.config部分内容如下
# Character devices
#
CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_DEVKMEM is not set
CONFIG_MINI2440_HELLO_MODULE=m
 
CONFIG_BUTTONS_LEDS=m

CONFIG_LEDS_MINI2440=m
CONFIG_MINI2440_BUTTONS=m
CONFIG_MINI2440_BUZZER=y
CONFIG_MINI2440_ADC=y
# CONFIG_SERIAL_NONSTANDARD is not set

从上面几行我们可以看到,在makefile里面的变量都是在.config中赋值的。当我们在源代码目录下输入make命令时,都是默认从.config中读入。
当我们在内核源码目录下输入make menuconfig时,出现如下内容:

.config - Linux Kernel v2.6.32.2 Configuration
──────────────────────────────────────────────

┌──────────Linux Kernel Configuration────────────────────┐
│  Arrow keys navigate the menu.  <Enter> selects submenus --->.  Highlighted letters are  hotkeys.  Pressing <Y> includes, <N> excludes, <M> modularizes features.  Press <Esc>  to exit, <?> for Help, </> for Search.  Legend: [*] built-in  [ ] excluded  <M> module < > module capable                                                                             
│ ┌───────────────────────────────────────────┐
│ │             General setup  --->                                                      │
│ │  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值