1. 程式人生 > >新增網絡卡驅動和USB支援 以及一些問題的集中處理

新增網絡卡驅動和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>  //

新增DM9000網絡卡的標頭檔案

並新增如下程式碼

/* 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,

        .end   = DM9000_BASE + 7,        .flags = IORESOURCE_MEM    },    [2] = {        .start = IRQ_EINT7,        .end   = IRQ_EINT7,        .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,    }};

/*         * The DM9000 has no eeprom, and it's MAC address is set by * the bootloader before starting the kernel.

 */static struct dm9000_plat_data s3c_dm9000_pdata = {    .flags      = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),};

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檢視裝置MACIP地址以及設定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核心才能支援此筆記本的無線網絡