Linux设备驱动移植

八、Linux设备驱动移植

1、设备树

1.1设备树

设备树是一种描述硬件信息的数据结构,Linux内核运行时可以通过设备树将硬件信息直接传递给Linux内核,而不再需要在Linux内核中包含大量的冗余编码

2、设备树语法概述

2.1 设备树文件

dts 设备树源文件

dtsi 类似于头文件,包含一些公共的信息,可被其它设备树文件引用

dtb 编译后的设备树文件

2.2 设备树语法

设备树的语法为树状结构,由一系列的节点和属性组成,根节点下包含子节点 子节点下还可以包含子节点,节点内部包含了对应设备的属性

 

/{

memory{

0x40000000

};

子节点

};根节点

3、Linux内核驱动移植

1.在make menuconfig界面中选中要安装的驱动

2.在设备树中添加/修改相应的设备信息

3.重新编译内核/设备树

4、网卡驱动移植

Linux内核驱动移植

1.在make menuconfig界面中选中要安装的驱动

在内核源码的顶层目录下执行如下命令,修改内核配置

make menuconfig

出现以下界面

 

给内核选配 DM9000 网卡驱动,然后选择“Save”保存

Device Drivers --->
[*] Network device support --->
[*] Ethernet driver support --->
<*> DM9000 support

因为内核要使用 NFS 去挂载根文件系统,而 NFS 是基于 TCP 协议实现的,所以这里需要选配 TCP 相关的网络协议(部分功能默认已经选配),然后选择“Save”保存

[*] Networking support --->
Networking options --->
<*> Packet socket
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP: kernel level autoconfiguration

因为内核要使用 NFS 去挂载根文件系统,所以需要给内核选配 NFS 客户端及相关功能

File systems --->
[*] Network File Systems --->
<*> NFS client support
<*> NFS client support for NFS version 3 (NEW)
[*] NFS client support for the NFSv3 ACL protocol extension
[*] Root file system on NFS

设置完成后通过方向键选择‘Save’保存即可,然后选择‘Exit’退出该配置界面

2.在设备树中添加/修改相应的设备信息

$ vi arch/arm/boot/dts/exynos4412-fs4412.dts

在文件的末尾,最后一个花括号前添加如下内容(即要写在根节点之内)

srom-cs1@5000000 {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x5000000 0x1000000>;
ranges;
ethernet@5000000 {
compatible = "davicom,dm9000";
reg = <0x5000000 0x2 0x5000004 0x2>;
interrupt-parent = <&gpx0>;
interrupts = <6 4>;
davicom,no-eeprom;
mac-address = [00 0a 2d a6 55 a2];
};
};

修改时钟相关配置(忽略无用的时钟)

$ vi drivers/clk/clk.c
将static bool clk_ignore_unused;
修改为以下内容,然后保存退出
static bool clk_ignore_unused=true;
修改 EMMC 相关配置
$ vi drivers/mmc/core/mmc.c
将
if (card->ext_csd.rev > 7) {
pr_err("%s: unrecognised EXT_CSD revision %d\n", mmc_hostname(card->host), card->ext_csd.rev);
err = -EINVAL;
goto out;
}
修改为以下内容,然后保存退出
#if 0
if (card->ext_csd.rev > 7) {
#else
if (card->ext_csd.rev > 8) {
#endif
pr_err("%s: unrecognised EXT_CSD revision %d\n", mmc_hostname(card->host), card->ext_csd.rev);
err = -EINVAL;
goto out;
}

3.重新编译内核/设备树

编译内核和设备树

$ make uImage
$ make dtbs

测试内核和设备树

将编译生成的内核和设备树拷贝到 tftp 的工作目录

$ sudo cp arch/arm/boot/uImage /tftpboot
$ sudo cp arch/arm/boot/dts/exynos4412-fs4412.dtb /tftpboot/
$ sudo chmod 777 /tftpboot/*

重启 tftp 和 nfs 服务器

$ sudo service tftpd-hpa restart
$ sudo service nfs-kernel-server restart

重启开发板查看现象,如图所示,此时 Linux 内核已经能通过 NFS 去挂载根文件系统在终端下执行‘ls’命令我们就能看到根文件系统中的内容

 

day8作业

1.简述设备树的作用以及使用设备树的优势是什么?

设备树是一种描述硬件信息的数据结构,Linux内核运行时可以通过设备树将硬件信息直接传递给Linux内核,而不再需要在Linux内核中包含大量的冗余编码

对于同一SOC的不同主板,只需更换设备树文件.dtb即可实现不同主板的无差异支持,而无需更换内核文件。

2.简述在Linux内核上移植一个驱动程序(内核源码支持)需要做哪些事?

①编译内核和设备树②测试内核和设备树,将编译生成的内核和设备树拷贝到 tftp 的工作目录③重启 tftp 和 nfs 服务器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
linux移植驱动编写最详细教程,Linux 操作系统的安装以及配置............................................................................................3 1 如何安装RedHat9.0 ................................................................................................3 2 在RedHat 中添加新用户.......................................................................................16 3 配置PC 机Linux 的ftp 服务...................................................................................16 4 配置PC 机Linux 的telnet .....................................................................................17 5 建立交叉编译环境...................................................................................................17 6 编译内核..................................................................................................................17 Linux移植.......................................................................................................................19 1 Bootloader 的移植.................................................................................................19 1.1 vivi 的配置与编译..........................................................................................19 1.2 配置和编译vivi .............................................................................................20 1.3 vivi 代码分析..................................................................................................21 1.4 vivi 的运行.....................................................................................................21 1.5 启动代码执行流程图.....................................................................................45 1.6 vivi 的配置文件..............................................................................................45 2 Linux 内核

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值