个人博客网站开发,网站关于我们的页面,桂林相关网站,网站流量地址评价是什么意思目录
1 设备树
1.1概念
1.2 设备树文件
1.3 设备树语法
2 Linux内核驱动移植
2.1 步骤
3 实验八网卡驱动移植
3.1 在内核源码的顶层目录下执行如下命令#xff0c;修改内核配置
3.2 在设备树中添加网卡的硬件信息
3.3 修改时钟相关配置#xff08;忽略无用的时钟修改内核配置
3.2 在设备树中添加网卡的硬件信息
3.3 修改时钟相关配置忽略无用的时钟
3.4 修改 EMMC 相关配置
3.5 编译内核和设备树
3.6 测试内核和设备树
4 练习 1 设备树
1.1概念
设备树是一种描述硬件信息的数据结构Linux内核运行时可以通过设备树将硬件信息直接传递给Linux内核而不再需要在Linux内核中包含大量的冗余编码
驱动负责逻辑、设备树负责操作寄存器把两者分开管理移植到其他芯片的时候驱动逻辑不需要变更只需要修改设备树即可同时可以使得内核源码大小精简
1.2 设备树文件
dts 设备树源文件
dtsi 类似于头文件包含一些公共的信息可被其它设备树文件引用
dtb 编译后的设备树文件
1.3 设备树语法
设备树的语法为树状结构由一系列的节点和属性组成根节点下包含子节点 子节点下还可以包含子节点节点内部包含了对应设备的属性
2 Linux内核驱动移植
2.1 步骤
1.在make menuconfig界面中选中要安装的驱动 2.在设备树中添加/修改相应的设备信息 3.重新编译内核/设备树
3 实验八网卡驱动移植 【实验目的】 掌握 Linux 内核配置的基本方法完成对网卡驱动、 NFS 等相关功能的配置。 注在开发板上电uboot启动时可以通过tftp下载此时时uboot支持网卡驱动当kernel启动时卡住时内核还不支持 【实验环境】 ubuntu 14.04 发行版 FS4412 实验平台 交叉编译工具 arm-none-linux-gnueabi- 【注意事项】 实验步骤中以“ $ ”开头的命令表示在 ubuntu 环境下执行以“ # ”开头的命令表 示在开发板下执行 【实验步骤】 3.1 在内核源码的顶层目录下执行如下命令修改内核配置 $ 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’退出该配置界面 3.2 在设备树中添加网卡的硬件信息 $ vi arch/arm/boot/dts/exynos4412-fs4412.dts 在文件的末尾最后一个花括号前添加如下内容即要写在根节点之内 srom-cs15000000 {compatible simple-bus;#address-cells 1;#size-cells 1;reg 0x5000000 0x1000000;ranges;ethernet5000000 {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];};
}; 3.3 修改时钟相关配置忽略无用的时钟 $ vi drivers/clk/clk.c 将 static bool clk_ignore_unused; 修改为以下内容然后保存退出 static bool clk_ignore_unusedtrue; 3.4 修改 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) {
#endifpr_err(%s: unrecognised EXT_CSD revision %d\n,mmc_hostname(card-host), card-ext_csd.rev);err -EINVAL;goto out;
} 3.5 编译内核和设备树 $ make uImage
$ make dtbs 3.6 测试内核和设备树 将编译生成的内核和设备树拷贝到 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 ’命令我们就能看到根文件系统中的内容 4 练习
1.简述设备树的作用以及使用设备树的优势是什么 2.简述在Linux内核上移植一个驱动程序内核源码支持需要做哪些事
1设备树是一种描述硬件信息的数据结构Linux内核运行时可以通过设备树将硬件信息直接传递给Linux内核而不再需要在Linux内核中包含大量的冗余编码21.在make menuconfig界面中选中要安装的驱动 2.在设备树中添加/修改相应的设备信息 3.重新编译内核/设备树