기본 콘텐츠로 건너뛰기

Wifi Dongle Driver Porting RTL8188CUS to embedded Linux

여러가지를 고려하여 kernel 에서 제공되는 Wifi Dongle을 선정했으나
kernel source에서 제공되는 driver로는 driver로딩은 되었지만 wlan0가 보이지 않음.
realtek site를에서 linux driver를 받아서
http://www.realtek.com.tw/downloads/downloadsView.aspx?Langid=1&PNid=48&PFid=48&Level=5&Conn=4&DownTypeID=3&GetDown=false&Downloads=true#RTL8192CU
nvs3320 kernel device driver 빌드조건을 추가수정하여
Makefile
73 CONFIG_PLATFORM_ARM_NVS3320 = y
..
513 ifeq ($(CONFIG_PLATFORM_ARM_NVS3320), y)
514 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
    EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
515 ARCH := arm
516 CROSS_COMPILE := arm-cortex_a9-linux-gnueabi-
517 KVER  := 3.4.39
518 KSRC:= ~/git_local/myproject/kernel/kernel-3.4.39/
519 endif


빌드하여 kernel driver를 생성한후
보드에 복사한 후 insmod를 통해서 device driver를 로딩하면 wlan 이 보임.
# insmod 8192cu.ko
[   26.500000] rtl8192cu driver version=v4.0.2_9000.20130911
[   26.500000] build time: Jan 18 2016 16:18:46
[   26.510000]
[   26.510000] usb_endpoint_descriptor(0):
[   26.510000] bLength=7
[   26.510000] bDescriptorType=5
[   26.520000] bEndpointAddress=81
[   26.520000] wMaxPacketSize=200
[   26.520000] bInterval=0
[   26.530000] RT_usb_endpoint_is_bulk_in = 1
[   26.530000]
[   26.530000] usb_endpoint_descriptor(1):
[   26.540000] bLength=7
[   26.540000] bDescriptorType=5
[   26.550000] bEndpointAddress=2
[   26.550000] wMaxPacketSize=200
[   26.550000] bInterval=0
[   26.550000] RT_usb_endpoint_is_bulk_out = 2
[   26.560000]
[   26.560000] usb_endpoint_descriptor(2):
[   26.560000] bLength=7
[   26.570000] bDescriptorType=5
[   26.570000] bEndpointAddress=3
[   26.570000] wMaxPacketSize=200
[   26.580000] bInterval=0
[   26.580000] RT_usb_endpoint_is_bulk_out = 3
[   26.580000]
[   26.580000] usb_endpoint_descriptor(3):
[   26.590000] bLength=7
[   26.590000] bDescriptorType=5
[   26.590000] bEndpointAddress=84
[   26.600000] wMaxPacketSize=40
[   26.600000] bInterval=1
[   26.600000] RT_usb_endpoint_is_int_in = 4, Interval = 1
[   26.610000] nr_endpoint=4, in_num=2, out_num=2
[   26.610000]
[   26.610000] USB_SPEED_HIGH
[   26.610000] CHIP TYPE: RTL8188C_8192C
[   26.620000] register rtw_netdev_ops to netdev_ops
[   26.620000] Chip Version ID: VERSION_NORMAL_TSMC_CHIP_88C.
[   26.630000] RF_Type is 3!!
[   26.630000] EEPROM type is E-FUSE
[   26.640000] ====> ReadAdapterInfo8192C
[   26.640000] Boot from EFUSE, Autoload OK !
[   26.780000] EEPROMVID = 0x0bda
[   26.780000] EEPROMPID = 0x8176
[   26.780000] EEPROMCustomerID : 0x00
[   26.790000] EEPROMSubCustomerID: 0x00
[   26.790000] RT_CustomerID: 0x00
[   26.790000] _ReadMACAddress MAC Address from EFUSE = 90:9f:33:ec:f5:93
[   26.800000] EEPROMRegulatory = 0x0
[   26.800000] _ReadBoardType(0)
[   26.810000] BT Coexistance = disable
[   26.810000] mlmepriv.ChannelPlan = 0x02
[   26.810000] _ReadPSSetting...bHWPwrPindetect(0)-bHWPowerdown(0) ,bSupportRemo
teWakeup(0)
[   26.820000] ### PS params=>  power_mgnt(1),usbss_enable(0) ###
[   26.830000] ### AntDivCfg(0)
[   26.830000] readAdapterInfo_8192CU(): REPLACEMENT = 1
[   26.840000] <==== ReadAdapterInfo8192C in 200 ms
[   26.840000] rtw_macaddr_cfg MAC Address  = 90:9f:33:ec:f5:93
[   26.850000] bDriverStopped:1, bSurpriseRemoved:0, bup:0, hw_init_completed:0
[   26.870000] _rtw_drv_register_netdev, MAC Address (if1) = 90:9f:33:ec:f5:93
# lsmod
    Tainted: G
8192cu 566202 0 - Live 0x7f0ed000 (O)
vfat 10855 0 - Live 0x7f0e6000
fat 60909 1 vfat, Live 0x7f0d1000
nc_gfb 19539 0 - Live 0x7f0c9000 (O)
nx_vpu 410125 0 - Live 0x7f05f000 (O)
vr 217673 0 - Live 0x7f019000 (O)
nc_base 819 0 - Live 0x7f015000 (O)
# ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 90:9F:33:EC:F5:93
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
wifi dongle firmware
wget https://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git/tree/rtlwifi/rtl8192cufw.bin
kernel source 및 userfs에 포함된 driver 에서는 요구하나 realtek site에서 받은 driver에서도 요구하는지는 확인되지 않았습니다.
다운로드 받은 파일은 /lib/firmware/rtlwifi 폴더에 아래에 위치시켜야 인식을 하며,
ramdisk는 항상 지워지므로 rootfs을 만들때 포함시켜야합니다.

댓글