網卡是嵌入式產品常用的設備,這里我們需要完成網卡驅動的移植。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掛載根文件系統