1. 程式人生 > >tiny4412學習(三)之移植linux-4.x驅動(1)支援網絡卡驅動

tiny4412學習(三)之移植linux-4.x驅動(1)支援網絡卡驅動

一、思路

上一節我們通過DNW將核心、檔案系統、裝置樹檔案燒入到記憶體中,並使用bootm啟動核心:bootm0x40600000  0x41000000  0x42000000。因為此時核心並沒有SD卡驅動,和EMMC驅動,我們只能直接將系統拷貝至記憶體中然後啟動。當時我們進入檔案系統後,並無法掛載外面的網路檔案系統,對開發帶來很多不便,所以這一節,我們移植網絡卡,讓系統啟動後可以掛接虛擬機器中的網路檔案系統,或者直接掛載虛擬機器中的網路檔案系統。

tiny4412網絡卡跟DM9000差別很大,DM9000是記憶體介面,移植容易, tiny4412使用的網絡卡晶片是DM9621,是usb介面的,而且並沒有直接連線到exynos4412上,中間通過一個hub晶片usb4640,然後usb4640通過HSIC介面(XhsicSTROBE0和XhsicDATA0)連線到exynos4412上。

DM9621的驅動在Linux4.4中在driver/net/usb/dm9601.c中實現了,我們需要在核心配置中將DM9601的驅動編譯進核心。

make menuconfig

   Device Drivers  --->
       Network device support  --->
           USB Network Adapters  --->
                Davicom DM96xx based USB 10/100ethernet devices

此外,最關鍵的是要在裝置樹中將用到的片內外設使能:如hsi、ehci、ohci、otg等等。執行完這些操作後,板子上的三個usb口(USBH1/USBH2/USBH3)都可以識別了,即可以插入U盤等裝置了。

二、核心修改的地方主要如下:

(1)arch/arm/boot/dts/exynos4412-tiny4412.dts

(2)drivers/net/usb/dm9601.c

(3)drivers/usb/misc/Kconfig

(4)drivers/usb/misc/Makefile

(5)drivers/usb/misc/usb4640.c(新建)

(6)include/dt-bindings/usb4640/usb4640.h(新建)

(7)include/linux/platform_data/usb4640.h(新建)

三、測試

對核心做如上修改後,編譯並下載

1、  編譯

make mrproper
cp tiny4412_defconfig .config
make uImage  LOADADDR=0x40008000  -j2
make  dtbs

2、  下載

下載核心、檔案系統、裝置樹檔案

#u-boot:dnw  0x40600000

dnw  arch/arm/boot/uImage.

#u-boot:dnw  0x41000000 

dnw  ramdisk.img

#u-boot:dnw  0x42000000

dnw   arch/arm/boot/dts/exynos4412-tiny4412.dtb

啟動核心使用bootm啟動核心:

bootm  0x40600000  0x41000000  0x42000000

3、  測試

ifconfig eth0 192.168.1.125

ping 192.168.1.123

mount -t nfs -o nolock192.168.1.123:/work/nfs/filesystem  /mnt


4、從網路檔案系統啟動

#u-boot
setenv bootargs  'root=/dev/nfs  rw  nfsroot=192.168.1.123:/work/nfs/filesystem ethmac=1C:6F:65:34:51:7E  ip=192.168.1.125:192.168.1.123:192.168.1.1:255.255.255.0::eth0:off console=ttySAC0,115200  init=/linuxrc'
#u-bootsave
#u-bootdnw 0x40600000
dnw arch/arm/boot/uImage
#u-bootdnw 0x42000000
dnw  arch/arm/boot/dts/exynos4412-tiny4412.dtb
bootm 0x40600000 - 0x42000000


四、原始碼下載

git clone https://github.com/fengyuwuzu0519/rootfs_forTiny4412

檔案系統git下了少東西,則建立如下:

(mkdir dev  proc  sys  tmp  var    mknod  dev/console  c  5  1

git clone https://github.com/fengyuwuzu0519/u-boot_forTiny4412

make distclean

make tiny4412_config

make

核心修改的程式碼下載連結: