网卡是嵌入式产品常用的设备,这里我们需要完成网卡驱动的移植。FS4412使用的是DM9000网卡,我们通过这个实验能够了解如何在内核中添加网卡驱动及网络功能的基本配置。
由图中可以看到如下内容:
有16根数据线,所以总线宽度为16bit
中断线为DM9000_IRQ对应的XEINT6,也就是使用的终端是外部中断6(EINT6)
片选线为BUF_Xm0cs1,即片选1,对应的地址空间为0x05000000 – 0x06000000
所以设备树文件中添加如下内容:
$ vim 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];
};
};
参考文件:Documentation/devicetree/bindings/net/davicom-dm9000.txt
$ vimarch/arm/boot/dts/exynos4x12-pinctrl.dtsi
gpx0: gpx0 {
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
interrupt-parent = <&gic>;
interrupts = <0 16 0>, <0 17 0>, <0 18 0>, <0 19 0>,
<0 20 0>, <0 21 0>, <0 22 0>, <0 23 0>;
#interrupt-cells = <2>;
};
外部中断6对应的GPIO口为GPX0_6,所以:
interrupt-parent = <&gpx0>;
外部中断6对应的是gic中的22所以
interrupts = <6 4>; 6对应的是外部中断6也就是gic中的22,4为高电平触发中断
参考内容:Documentation/devicetree/bindings/arm/gic.txt
Documentation/devicetree/bindings/arm/samsung/interrupt-combiner.txt
配置内核:
makemenuconfig
//网卡相关选项
[*] Networking support --->
Networking options --->
<*> Packet socket
<*>Unix domain sockets
[*] TCP/IP networking
[*] IP: kernel level autoconfiguration
//DM9000网卡相关选项
Device Drivers --->
[*] Network device support --->
[*] Ethernet driver support (NEW) --->
<*> DM9000 support
//NFS 相关选项
File systems --->
[*] Network File Systems (NEW) --->
<*> NFS client support
[*] NFS client support for NFS version 3
[*] NFS client support for the NFSv3 ACL protocol extension
[*] Root file system on NFS
编译内核和设备树
$ make uImage
$ make dtbs
设置系统启动参数如果使用NFS启动的话,则可以通过NFS挂载根文件系统