新增網絡卡驅動和USB支援 以及一些問題的集中處理
之前核心移植時沒有新增網絡卡驅動和USB支援,新增如下:
1.乙太網卡驅動安裝:
1.1第一步、修改核心程式碼
[[email protected] ~]$ cd fl2440
[[email protected] fl2440]$ cd kernel
[[email protected] kernel]$ cd linux-3.0
[[email protected] linux-3.0]$ cd arch/arm/cd mach-s3c2440
[[email protected] mach-s3c2440]$ vim mach-smdk2440.c
#include <linux/dm9000.h> //
並新增如下程式碼
/* add DM9000 ethernet drivers ,whitch is modify by luxibao */#define DM9000_BASE (S3C2410_CS4 + 0x300)static struct resource s3c_dm9000_resource[] = { [0] = { .start = DM9000_BASE, .end = DM9000_BASE + 3, .flags = IORESOURCE_MEM }, [1] = { .start = DM9000_BASE + 4,
/* * The DM9000 has no eeprom, and it's MAC address is set by * the bootloader before starting the kernel.
static struct platform_device s3c_device_dm9000 = { .name = "dm9000", .id = -1, .num_resources = ARRAY_SIZE(s3c_dm9000_resource), .resource = s3c_dm9000_resource, .dev = { .platform_data = &s3c_dm9000_pdata, },};
1.2.修改platform_device *smdk2440_devices[] __initdata結構體為如下,在其中新增啟動DM9000
static struct platform_device *smdk2440_devices[] __initdata = { &s3c_device_ohci, &s3c_device_lcd, &s3c_device_wdt, &s3c_device_i2c0, &s3c_device_iis, &s3c_device_dm9000,};
1.3.vim include/linux/dm9000.h 新增如下標頭檔案
#include <linux/io.h>
重新make之後,我們的核心檔案就支援dm9000網絡卡了,在開發板上跑起來後,就能夠ping 192.168.1.2(電腦有線IP)
2.Linux核心新增USB支援
新增USB支援:
FL2440新增u盤的掛載比較簡單,大部分的內容都是在核心裡面做make menuconfig,配置核心
Device Drivers --->
Generic Driver Options --->
(/sbin/hotplug) path to uevent helper //配置u盤的熱插拔
[*] Block devices --->
<*> Low Performance USB Block driver
SCSI device support --->
<*> SCSI device support
<*> SCSI generic support
[*]legacy /proc/scsi/ support<*>SCSI disk support<*> SCSI CDROM support
[*] Probe all LUNs on each SCSI device
[*] HID Devices --->
<*> USB Human Interface Device (full HID) support
[*] /dev/hiddev raw HID device support
[*] USB support --->
<*> Support for Host-side USB
[*] USB device filesystem (DEPRECATED)
[*] USB device class-devices (DEPRECATED)
<*> USB Monitor
<*> OHCI HCD support
<*> USB Mass Storage support
File systems ---> //配置u盤的檔案系統
DOS/FAT/NT Filesystems --->
<*> MSDOS fs support
<*> VFAT (Windows-95) fs support
(936) Default codepage for FAT
(cp936) Default iocharset for FAT
-*- Native language support ---> //配置u盤的語言格式支援,不過感覺著個配置沒什麼用,中文也支援不了,也許是因為linux對中文的支援並不好吧
<*> Simplified Chinese charset (CP936, GB2312)
<*> ASCII (United States)
<*> NLS UTF-8
配置好之後,重新編譯,燒寫到板子上面執行,(現在板子上面有u盤)就可以看到以下資訊了
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
usbcore: registered new interface driver ub
Uniform Multi-Platform E-IDE driver
usbcore: registered new interface driver uas
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
mousedev: PS/2 mouse device common for all mice
i2c /dev entries driver
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
TCP cubic registered
NET: Registered protocol family 17
Freeing init memory: 13188K
usb 1-1: new full speed USB device number 2 using s3c2410-ohci
hub 1-1:1.0: USB hub found
hub 1-1:1.0: 4 ports detected
usb 1-1.2: new full speed USB device number 3 using s3c2410-ohci
uba: uba1
usb 1-1.2: USB disconnect, device number 3
usb 1-1.1: new full speed USB device number 4 using s3c2410-ohci
uba: uba1
這時候就可以看到我們的u盤已經掛載好了。
後記:
有時候,我們可能發現我們配置好了核心,但是我們的u盤無論如何也發現不了,這時候就出現了一個問題,這個問題不是在於我的核心配置有錯誤,而是在於我們的u-boot設定usb的時鐘不對引起的。這樣,我就不得不重新回到u-boot,配置好usb的時鐘。
修改u-boot中:board/fl2440/fl2440.c檔案中關於usb的時鐘的內容,將如下三個巨集的值改為如下
#define U_M_MDIV 0x38
#define U_M_PDIV 0x2
#define U_M_SDIV 0x2
重新編譯u-boot和核心,燒寫,重啟之後,我們的核心就能支援u盤了。
新增USB結構體變數,加廠商ID和裝置ID
[[email protected] linux-3.0]$ vim drivers/usb/serial/option.c
2964 @@ -51,6 +51,13 @@2965 static void option_instat_callback(struct urb *urb);2966 2967 /* Vendor and product IDs */2968 +static int vendor = 0; /* Add by guowenxue */2969 +static int product = 0; /* Add by guowenxue */2970 +2971 +/* Vendor and product IDs */2972 +#define OPTION_VENDOR_RESERVED 0xFFFF /* Add by guowenxue */2973 +#define OPTION_RESERVED_DEVICE 0xFFFF /* Add by guowenxue */ 2974 +2975 #define OPTION_VENDOR_ID 0x0AF02976 #define OPTION_PRODUCT_COLT 0x50002977 #define OPTION_PRODUCT_RICOLA 0x60002978 @@ -446,7 +453,8 @@2979 .reason = OPTION_BLACKLIST_SENDSETUP2980 };2981 2982 -static const struct usb_device_id option_ids[] = {2983 +static struct usb_device_id option_ids[] = {
2984 + { USB_DEVICE(OPTION_VENDOR_RESERVED, OPTION_RESERVED_DEVICE) }, /* Add by guowenxue */2985 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },2986 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },2987 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },2988 @@ -1079,6 +1087,15 @@2989 static int __init option_init(void)2990 {2991 int retval;2992 +2993 + if ((vendor>0) && (product>0))2994 + {2995 + option_ids[0].match_flags = USB_DEVICE_ID_MATCH_DEVICE;2996 + option_ids[0].idVendor = vendor;2997 + option_ids[0].idProduct = product;2998 + printk("Register option drvier for modem vendor=0x%04x product=0x%04x\n", vendor, product);2999 + }3000 +
[[email protected] linux-3.0]$ vim arch/arm/mach-s3c2440/mach-smdk2440.c
4 @@ -23,6 +23,13 @@ 5 #include <linux/platform_device.h> 6 #include <linux/io.h> 7 8 +/* add by guowenxue for norflash */ 9 +#include <linux/gpio_keys.h> 10 +#include <linux/input.h> 11 +#include <linux/mtd/physmap.h> 12 +#include <linux/mtd/mtd.h> 13 +#include <linux/mtd/partitions.h> 14 + 15 #include <asm/mach/arch.h> 16 #include <asm/mach/map.h> 17 #include <asm/mach/irq.h> 18 @@ -44,6 +51,11 @@ 19 #include <plat/clock.h> 20 #include <plat/devs.h> 21 #include <plat/cpu.h> 22 +#include <plat/ts.h> /*Add by guowenxue to support Touch screen, 2011.09.06*/ 23 +#include <mach/regs-clock.h> /*Add by guowenxue 2012.07.15, for usb_s3c2440_init() */ 24 +#include <linux/i2c.h> /*Add by guowenxue 2012.10.22, for AT24C512 driver */ 25 +#include <linux/i2c/at24.h> /* Add by guowenxue 2012.10.22, for AT24C512 driver */
26 +#include <linux/delay.h> 27 28 #include <plat/common-smdk.h> 29 30 @@ -102,6 +114,13 @@ 31 }
224 +/* Add by guowenxue 2012.07.15, fix device descriptor read/64, error -62 bug, value refer to datasheet P255 */ 225 +int usb_s3c2440_init(void) 226 +{ 227 + /* Input Frequency is 12.0000MHz, and MDEV=0x38 PDIV=2 SDIV=2, so output frequency 48.00MHz */ 228 + unsigned long upllvalue = (0x38<<12)|(0x02<<4)|(0x02); 229 + while (upllvalue != __raw_readl(S3C2410_UPLLCON)) 230 + { 231 + __raw_writel(upllvalue, S3C2410_UPLLCON); 232 + mdelay(1); 233 + } 234 + 235 + return 0; 236 +} 237 +
238 static void __init smdk2440_map_io(void) 239 { 240 s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc)); 241 - s3c24xx_init_clocks(16934400); 242 + s3c24xx_init_clocks(12000000); /*Modify by guowenxue, 2011.08.30*/ 243 s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs)); 244 + usb_s3c2440_init(); /* Add by guowenxue, 2012.07.15 */ 245 } 246
重新編譯下核心,載入到開發板,插入U盤
由於之前的種種原因導致出現的一些問題集中解決了一些,如下:
1.由於之前安裝虛擬機器時候沒有注意系統時間的設定導致後面make出現問題----date設定之後沒有進行hwclock設定,硬體時鐘同軟體時鐘不同步:
解決:
方法一: Date 命令
在 Linux 中, 你可以通過 date 命令來更改系統的日期和時間:
# date --set='NEW_DATE'
其中 NEW_DATE 是諸如 "Sun, 28 Sep 2014 16:21:42" 或者 "2014-09-29 16:21:42" 的可讀格式的日期字串.
日期格式也可以手動指定以獲得更精確的結果:
# date +FORMAT --set='NEW_DATE'
例如:
# date +’%Y%m%d %H%m’ --set='20140928 1518'
你也可以用相對的方式地增加或減少一定的天數,週數,月數和秒數,分鐘數,小時數。 你也可以把日期和時間的引數放到一個命令中。
# date --set='+5 minutes'# date --set='-2 weeks'# date --set='+3 months'# date --set='-3 months +2 weeks -5 minutes'
最後, 把硬體時鐘設定為當前系統時鐘:
# hwclock --systohc
執行 hwclock --systohc 的目的是將硬體時鐘同軟體時鐘同步, 這可以更正硬體時鐘的系統漂移(即時鐘按照一定的速度走快或走慢).
另一方面, 如果硬體時鐘是正確的, 但系統時鐘有誤, 可以用下面的命令更正:
# hwclock --hctosys
在兩種情況下, hwclock 命令都是將兩個時鐘同步. 否則, 重啟後時間會是錯誤的, 因為當電源關閉時硬體時鐘會記憶時間. 然而, 這對於虛擬機器器並不適用, 因為虛擬機器器並不能訪問硬體時鐘.
方法二: NTP
另一種使系統日期和時間保持精確的方法是使用 NTP (網路時間協議). 在 Linux 上, ntpdate 命令通過 NTP 將系統時鐘和公共 NTP 伺服器同步.
你可以使用如下命令來安裝 ntpdate:
在 Debian 及基於 Debian 的發行版上:
# aptitude install ntpdate
在基於 Ret Hat 的發行版上:
# yum install ntpdate
使用 NTP 同步系統時鐘:
# ntpdate -u <NTP 伺服器名或IP># hwclock --systohc
除了一次性使用 ntpdate 來同步時鐘, 你也可以使用 NTP 守護程序(ntpd), 它會始終在後臺執行, 不斷地通過 NTP 來調整系統時鐘。
2.修改好系統時間後沒有重新make導致
解決:刪除原來的hello.ko,重新make生成hello.ko,然後重新tftp載入
3.重新編譯的核心燒錄到開發板上後無法燒錄ubifs檔案系統:
解決:檢視根檔案系統樹的init和linuxrc 是否存在 busybox的版本是否是ARM版本
沒有問題。 試用了其他同學的檔案系統還是不行,最後確定是核心的問題,轉了同學的.congfig檔案重新make後可以了。
4.
我們配置好了核心,但是我們的u盤無論如何也發現不了,這時候就出現了一個問題,這個問題不是在於我的核心配置有錯誤,而是在於我們的u-boot設定usb的時鐘不對引起的。這樣,我就不得不重新回到u-boot,配置好usb的時鐘。
解決:修改u-boot中:board/fl2440/fl2440.c檔案中關於usb的時鐘的內容,將如下三個巨集的值改為如下
#define U_M_MDIV 0x38
#define U_M_PDIV 0x2
#define U_M_SDIV 0x2
重新編譯u-boot和核心,燒寫,重啟之後,我們的核心就能支援u盤了。
相關推薦
新增網絡卡驅動和USB支援 以及一些問題的集中處理
之前核心移植時沒有新增網絡卡驅動和USB支援,新增如下: 1.乙太網卡驅動安裝: 1.1第一步、修改核心程式碼 [[email protected] ~]$ cd fl2440 [[email protected] fl2440]$ cd kernel
Esxi 6.0 -- Esxi 5.0 新增網絡卡驅動
et-e1000e:Obsolete- Driver for Intel I217/I218/82579LM/82574L net-tulip: DECchip 2114
linux檢視裝置網絡卡MAC和IP地址以及設定MAC ip的注意事項
1 檢視裝置的MAC和IPLinux/Unix作業系統熟悉的人都通常是用console命令控制檯來進行相應的操作。 Linux/Unix作業系統檢視網絡卡mac地址的方法可以通過以下命令獲得:1.ifconfig -a2.ip link show3.ip address
Centos7.4.1708 安裝usb無限網絡卡驅動
今天總結一下前幾天折騰的usb無線網絡卡驅動。 一、確定網絡卡驅動 實驗機器核心版本資訊如下: [[email protected] ~]# uname -a Linux localhost.localdomain 3.10.0-693.21.1.el7.x86_64 #1
在kali虛擬機器中安裝USB 無線網絡卡驅動
環境 VMware workstation 中安裝的Kali Linux 2.0 BL-Link USB無線網絡卡,型號:BL-LW05-5R2 準備工作 VM>>Remo
ath9k usb wifi 網絡卡驅動淺析
ieee80211 802.11協議簇是國際電工電子工程學會(IEEE)為無線區域網絡制定的標準。 概述 nl80211: 用於對無線裝置進行配置管理,它是一個基本Netlink的使用者態協議(User態) cfg80211: 用於對無線裝置進行
Ubuntu 14.04 安裝 USB無線網絡卡驅動
近期由於桌上型電腦無線上網的需要,買了個TP-LINK TL-WN823N 300M迷你USB無線網絡卡,但是由於官網只有windows的驅動,在linux下就只能自己豐衣足食了。 我的系統是Ubu
Zedboard移植USB無線網絡卡驅動心得
最近因為需要,要在Zedboard上移植一個無線網絡卡驅動,因為以前在友善之臂上面移植過,所以以為很簡單,沒想到這件事情卻花了我將近一週才搞好,中間就因為核心的一個小的疏忽,特在此將中間遇到的問題寫下來,留作以後謹記。 開發板:Zynq Zedboard作業系統:Ubunt
S3C6410開發全紀錄(三)《UBOOT中新增DM9000AE網絡卡驅動》
我們獲得的UBOOT的程式碼中實際是有DM9000的網口驅動的,位於:driver/dm9000x.c在S3C6410的配置中,中並沒有將之開啟,而其他的晶片中有使用特別需要注意的是dm9000的驅動與dm9000AE的驅動還是有區別的,如果直接使用程式碼中自帶的dm900
tiny4412學習(三)之移植linux-4.x驅動(1)支援網絡卡驅動
一、思路 上一節我們通過DNW將核心、檔案系統、裝置樹檔案燒入到記憶體中,並使用bootm啟動核心:bootm0x40600000 0x41000000 0x42000000。因為此時核心並沒有S
Linux USB無線網絡卡驅動相關資料收集
Linux下USB無線網絡卡驅動程式移植的實現 http://www.docin.com/p-297997312.html linux下安裝USB無線網絡卡驅動 http://wenku.baidu.com/view/fac9bb6da45177232f60a2e
黑蘋果,Mac OS X如何使用USB資料線連線手機網路(沒有網絡卡驅動時)
安裝黑蘋果之後,發現網絡卡驅動都不能使用,所以就想用手機幫助電腦連線網路; 開始用藍芽開始連線,因為我的黑蘋果可以使用藍芽,但手機連線之後總是間斷斷開。 所以就開始打算使用資料線使用手機的USB分享網路來使黑蘋果連線網路,非常簡單,下載一個基於Mac OS X 的USB t
rt3070 usb無線網絡卡驅動移植
核心配置: Networking ---> <*> Generic IEEE 802.11 Networking Stack Device Drivers ---> Generic Driver Options ---&g
【樹莓派】新增rtl8192eu無線網絡卡驅動
雙十一淘寶5塊錢買了一個使用rtl8192eu晶片的無線網絡卡,體積小巧,給樹梅派使用正好,但是樹莓派的官方核心並未提供該型號的驅動,需要自己編譯,下面介紹以下編譯步驟,注意,本次編譯是在樹莓派2
Debian桌面編譯安裝Tenda U1 USB無線網絡卡驅動
前序 朋友新組裝了一臺PC,應他的要求幫他裝了一個Debian Linux系統。 由於沒辦法直接用網線連著PC,他就買了一個USB的無線網絡卡連上無線路由就好。 結果Linux系統由於驅動問題,不
CentOS系統安裝和網絡卡驅動安裝
GNU/Linux的安裝過程中實際上已經安裝了很多可用的網絡卡驅動,但這一款:Realtek PCIe GBE Family Controller的驅動卻沒有。 而我的桌上型電腦:惠普 HP Pro 3380 MT剛好使用的是這一款網絡卡。由於沒有網路,而CentOS6.x
Linux USB網絡卡驅動安裝
浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>
Ubuntu14.04 無線網絡卡驅動安裝
由於新安裝的14.04是 沒有無線網絡卡驅動的,這裡需要自己安裝網絡卡驅動。 (第一步) 我們需要在win10下看到網絡卡型號 (第二步) 升級ubuntu核心(uname -sr可以看現在的核心版本) 在 http://kernel.ubuntu.com/~kernel
DPDK網絡卡驅動載入、繫結和解綁
Igb_uio程式碼相關的可以分為三個部分:igb_uio核心驅動,核心uio框架,uio使用者態部分。 載入igb_uio模組與繫結dpdk網絡卡 a)載入dpdk驅動需要先載入uio:modprobe uio b)載入dpdk驅動的方法:/sbin/insmod ig
ThinkPad E480安裝ubuntu後沒有無線網絡卡驅動,找不到wifi的解決方案
先安裝的ubuntu版本是ubuntu-16.04.3-desktop-amd64.iso 安裝後通過cat /proc/version或者uname -rs檢視linunx核心版本,其linux核心版本為4.10。 網上查到linux4.15及以上的linux核心才能支援此筆記本的無線網絡