Linux设备驱动移植

目录

一、设备树

1.1设备树

1.2设备树文件

1.3设备树语法

1.4Linux内核驱动移植

二、网卡驱动

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

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

2.3修改时钟 

2.4修改eMMc

2.5编译测试


一、设备树

1.1设备树

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

        操作一个硬件需要逻辑和硬件信息两种代码。Linux将这两种代码分离了,逻辑代码就是驱动,只是实现一个过程,不包含硬件信息。而这些硬件相关的代码就是设备树。

        老师举了一个例子。LED闪烁。闪烁的过程就是驱动代码。设备树就是告诉驱动让谁闪烁的。

        这样做的好处就是平台升级后驱动代码不用动改一下设备树就行。早期的Linux不是这种机制。是一个叫平台文件的机制。类似于uboot的board(uboot是学的Linux;不过我先学的uboot习惯这样说。)这种机制导致Linux的源码体积越来越大。最后Linux之父忍不住了将Linux社区维护的大佬用一个F开头的单词给骂了。说这些board文件都是垃圾(因为大部分都用不上。我们真正使用的就那点。一堆重复制造的轮子)。这些大佬也都是有头有脸的人物。所以后面ARM-Linux就引入的设备树机制。

1.2设备树文件

    dts  设备树源文件

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

    dtb  编译后的设备树文件

1.3设备树语法

    设备树的语法为树状结构,由一系列的节点和属性组成,根节点下包含子节点

    子节点下还可以包含子节点,节点内部包含了对应设备的属性

/{
	memory{
		0x40000000 0x40000000
	};
	dm9000{
		0x05000000;
	};	
	key{
		up{

		};
		down{
	
		};
	};
};

 设备树的语法很简单一个/就表示根节点每个子节点中有一些属性比如内存memory内又位置和大小。网卡dm9000里有网卡的位置。

键盘key内有具体哪个按键。

Linux设备驱动移植_第1张图片

 

1.4Linux内核驱动移植

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

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

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

二、网卡驱动

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

Linux设备驱动移植_第2张图片

 选择光标下面那个Device Drivers

Linux设备驱动移植_第3张图片

 Linux设备驱动移植_第4张图片

 Linux设备驱动移植_第5张图片

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

Linux设备驱动移植_第7张图片 

 Linux设备驱动移植_第8张图片

这四个一定要选

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

Linux设备驱动移植_第9张图片 

 Linux设备驱动移植_第10张图片

Linux设备驱动移植_第11张图片

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

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

Linux设备驱动移植_第12张图片 Linux设备驱动移植_第13张图片

添加到最后 

 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];
};
};

2.3修改时钟 

vi drivers/clk/clk.c 

Linux设备驱动移植_第14张图片 

把这个变量给个初值true(忽略无用的时钟)

2.4修改eMMc

 vi drivers/mmc/core/mmc.c

 Linux设备驱动移植_第15张图片

其实就是把7改成了8

2.5编译测试

make uImage

make dtbs

Linux设备驱动移植_第16张图片

Linux设备驱动移植_第17张图片 

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

Linux设备驱动移植_第18张图片 

你可能感兴趣的:(系统移植,系统移植,Linux,设备树,根文件系统移植)