嵌入式系统移植三(驱动的配置和编译)

有关内核的操作主要分为两个板块

配置Makefile   完成对文件或目录编译

配置Kconfig  提供内核的配置菜单选项  (.config 是内核的配置文件)

实验环境

主机:ubuntu12.04发行版

开发平台:FS4412平台

交叉编译工具:arm-none-linux-gnueabi-gcc

过程

1.解压内核

将 linux-3.14.tar.xz 拷贝到/home/linux 下并解压,这里单独创建了一个内核文件夹,把linux-3.14.tar.xz 复制到该目录下了(我已经解压过了)

这里有几个较为重要的路径,可以记一下

(1)arch 目录 :存放架构相关的代码
   arch/arm/boot/compressed    存放的是内核的自解压代码   
   arch/arm/kernel/head.S      Linux 内核的开始代码 
     |解压代码|压缩的Linux 内核|
   -----------------------------
   arch/arm/boot/dts(device tree source) 存放的是开发板相关的设备树文件(硬件信息) 
   arch/arm/configs                      存放的SOC芯片相关的内核配置文件 

(2)driver 目录: 设备驱动代码 
(3)net    目录: 网络协议栈的实现代码

2.配置Makefile和Kconfig

开发板是fs4412,这里是LED的驱动

配置路径是在当前路径下,配置具体如下:

 左边是Kconfig,右边是Makefile

一般情况下:

Makefile 配置的基本语法有两种方式

(1)0obj-y += dir/ 或 obj-y += file.o  表示对应目录需要编译进内核或指定的文件需要编译进内核

(2)obj-$(CONFIG_XXX) += dir/ 或 obj-$(CONFIG_XXX) += file.o     
     表示对应目录或文件是否需要编译进内核,取决于CONFIG_XXX宏的定义,也就是在.config是否有这个宏的定义:
   CONFIG_XXX=y

Kconfig配置

config 选项名
    属性1
    属性2 
    ...

解析:


[1]选项名 
config HELLO

展现的形式:CONFIG_HELLO,在.config文件中定义 

[2]属性 
    (1)选择类型
      <1>tristate(三态)   y:编译进内核  m:编译成模块  n:不编译   < >
      <2>bool             y:编译进内核  n:不编译   [ ]
                           
      <3>string     CONFIG_选项名="字符串"     ()
      <4>int        CONFIG_选项名=整数 
      <5>hex        CONFIG_选项名=十六进制数
    
    
    (2)提示字符串
       prompt "提示字符串" (配置菜单中显示)

    (3)range  指定值的范围

    (4)help   帮助信息
       help 
          "test help ..."
     
    (5)default  当没有进行配置的时候,默认的选择是什么
        例如:
        config HELLO 
            tristate 
            prompt "hello support"
            default y 
        

    (6)depends   on 配置选项名 
      [1]depends on 配置选项名 
      [2]depends on 配置选项名1(m) || 配置选项名2(y) 
      [3]depends on 配置选项名1(y) && 配置选项名3(m)
      
      y:2  m:1  n:0
      && -> 最小值
      || -> 最大值

      注意:如果依赖的结果为0:不可见,  2:三态 , 1:两态
    
    
    (7)select  配置选项名
      当前配置选项被选中的时候,同时选择select 指定的配置型选项
    
      
 (8)source  路径/Kconfig
      将这个路径下的Kconfig文件包含进来 
    
注意:(1)和(2)必须有,其它可选择

    总的来说,关于Makefile和Kconfig的配置格式大概如下:

  Makefile:
     obj-$(CONFIG_XXX) += file.o
     
     Kconfig:
     config XXX
             tristate "....."

 这里注意,如下不是在内核当前目录下配置的Makefile,需要回到上层目录再对这两个文件进行配置,如果在当前目录下,那便没必要再配置一次,这里我不是在当前目录配置的

回到上一层配置是这样,修改这两个地方

   

 配置完成后,运行build.sh

整个内核的配置和编译便完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值