QSDK平臺中,我所接觸到的版本,能支持MIPS架構的,是基於Openwrt AA版本;雖然CC版本上就已經能很好地支持AR8035了,但是AA版本它自己是不支持的,因而不斷有人要求提供補丁方法,通常統一固件開發平臺,從而減輕固件維護工做量。架構
簡單看了一下,若是直接將CC版中at803x降級以便適配到AA版本,改動工做量仍是比較多的,怕麻煩,因此就只能另想辦法,在百度/谷歌上找了好一番後,發現Matus Ujhelyi的at803x實現最簡單,只要將用不到的wol功能砍掉,餘下的代碼就沒幾行了;而後再檢查現有的ar80xx.c,它是能成功驅動AR8033的;並且,從驅動的角度上看,8033和8035相差不大,所以,適宜以ar80xx結合at803x,組建一個最小代碼量的新at803x,來實現此需求了。函數
首先下載一份Matus Ujhely最先期的at803x驅動,可直接到百度上找「at803x.c」便可;而後將現有的ar80xx.c和ar80xx.h分別拷貝爲at803x.c和at803x.h;將網上下載到的at803x.c中的at803x_enable_rx_delay和at803x_enable_tx_delay拷貝到新at803x.c中,在新at803x.c的ar803x_config_init中,強制使能「RGMII mode」、at803x_enable_rx_delay和at803x_enable_tx_delay;在ar803x_read_status,將uboot/board/ar7240/common/athrsf1_phy.c中athr_phy_speed中配置10M/100M/1000M時寄存器的配置值,經過phy_write函數,配置到對應的寄存器上便可。再其次,修改Kconfig文件,在AR80XX_PHY選項後增長AT803X_PHY選項;在Makefile中增長obj-$(CONFIG_AR80XX_PHY)預編譯指令便可;最後,將phy_id修改成0x004dd072。若是phy_id錯誤,仍是驅動不了該PHY的。開發
此外,按照網上CC版本驅動AR8035的通用方法,將mach-db120.c中的eth1的註冊代碼關閉掉;而後,要修改正確eth0的phy_mask值。若是是AR9344,它最多支持5個Port,也就是BIT(0)-BIT(4)而已。若是uboot啓動時,串口打印信息沒法肯定是哪一個port,則請在確保你的uboot是能正常驅動8035時,直接修改athrsf1_phy.c中athr_auto_neg中的打印信息,將"Neg Success"語句直接printf出來,這樣就知道是那個Port了,從而就能夠肯定是哪一個BIT(?)了。若是BIT(?)選填錯誤,網口仍是不能通的,插拔網線串口也不會有打印。故若是實在沒有辦法,就啓用BIT(0)到BIT(4),編譯出5個固件,總有一個固件是能成功驅動起來的。it
利用此方法,改動量很是小,且能正常驅動8035;插拔網線串口打印正常;100M/1000M協商正常(無10M口驗證);跑流正常;穩定性正常。從而能夠放心將原有固件遷移到QSDK平臺上。編譯