物联网之系统移植四(内核移植)

内核移植笔记:https://blog.csdn.net/weixin_39148042/article/details/82494980

Linux内核移植

1、配置编译

2、网卡移植

3、第三方驱动移植

Linux内核 配置编译

内核移植之一   配置编译

• 下载内核源码  (谷歌搜索 linux-3.14.tar.xz ,会很快找到有许多内核版本的列表)

• Linux系统中解压  (  tar -xvf  linux-3.14.tar.xz 注意不能在与window的共享目录解压)

• 修改Makefile指定交叉编译工具链

• 导入配置  make exynos_defconfig(配置列表见 arch/arm/configs/  找最类似的)

• 配置内核 make menuconfig

• 编译内核 make uImage

• 编译设备树  make dtbs

网卡移植

NFS 服务

网卡移植  平台无关

• 配置内核支持网络 

       $ make menuconfig

• 配置网络协议支持TCP/IP

        [*] Networking support   --->     //注意要先输入y  选择该菜单,再按enter键,才能看到下面的选项

          Networking options  --->

                     <*> Packet socket

                     <*> Unix domain sockets

           [*] TCP/IP networking

                     [*]   IP: kernel level autoconfiguration

• 配置支持网络文件系统 NFS

       File systems  --->   [*] Network File Systems  --->

            <*>   NFS client support

          <*>     NFS client support for NFS version 2

                                              [*]     NFS client support for NFS version 3

                                              [*]     NFS client support for the NFSv3

                                                      ACL protocol extension

                                              [*]   Root file system on NFS    

• 配置支持dm9000网卡驱动           

        Device Drivers  --->

                    [*] Network device support  --->

                    [*]   Ethernet driver support  --->

                   <*>   DM9000 support

网卡移植  平台相关

• 配置设备树描述网卡和CPU的链接情况 

       $ vim arch/arm/boot/dts/exynos4412-fs4412.dts  在 regulators 前添加下面代码

         srom-cs1@5000000 {

compatible = "simple-bus";

#address-cells = <1>;

#size-cells = <1>;

reg = <0x5000000 0x1000000>;    对应芯片手册 3 Memory Map 的0x0500_0000  和 16 MB ranges;

ethernet@5000000 {

    compatible = "davicom,dm9000";  内核通过该名字来匹配驱动

    reg = <0x5000000 0x2 0x5000004 0x2>;  寄存器地址和数据宽度

    interrupt-parent = <&gpx0>;   继承于 中断控制器gpx0

            interrupts = <6 4>; 6  对应中断源 DM9000_IRQ -> XEINT6 。4对应 active high level-sensitive     davicom,no-eeprom;

    mac-address = [00 0a 2d a6 55 a2];

};

};

• 修改文件driver/clk/clk.c   static bool clk_ignore_unused;改为static bool clk_ignore_unused = true;

CPU与设备连接描述  -   设备树DeviceTree

Device Tree是描述硬件信息的数据结构

用于管理 硬件拓扑和硬件资源信息。

Device Tree由一系列被命名的结点(node)和属性(property)组成,而结点本身可包含子结点。

所谓属性,其实就是成对出现的name和value。

帮助

百度:linux Device Tree 详解

官网:http://www.devicetree.org 和 http://elinux.org/Device_Tree

源码实例:

        说明: Documentation/devicetree/bindings/arm

        源码: arch/arm/boot/dts/exynos4412-origen.dts

CPU与设备连接描述  -   平台设备

    在内核里有一个结构“struct machine_desc”,内核用这个结构表示一个实际存在的板子,而针对每个板子都会有一个文件定义这个结构体,这个文件叫平台代码;

    如:arch/arm/mach-s5pv21/mach-smdkv210.c(新版本内核中没有基于Exynos4412的平台代码,这里以s5pv210为例)

MACHINE_START(SMDKV210, "SMDKV210")

/* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */

.atag_offset = 0x100,

.init_irq = s5pv210_init_irq,

.map_io = smdkv210_map_io,

.init_machine = smdkv210_machine_init,

.init_time = samsung_timer_init,

.restart = s5pv210_restart,

.reserve = &smdkv210_reserve,

MACHINE_END

第三方驱动移植

第三方驱动  黑盒移植

编译驱动进内核

   a.  选择驱动存放目录 (或任意目录)

   b.  改Makefile

   c.  改Kconfig  (界面可配置)

 

编译驱动为独立的模块

   a. 配置为模块方式

   b. make modules 编译为模块

   c. 创建设备节点(应用访问驱动的入口

           d. 运行测试驱动的应用程序

第三方驱动  白盒移植

• 打印跟踪 

• 驱动框架

   

字符设备框架

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值