RaspberryPi
raspbian

カーネルモジュールのコンパイル - RTL8812AUとMT7610U (Raspberry Pi) [メモ]

More than 3 years have passed since last update.


概要


環境


  • Raspberry Pi 3

  • 2016-05-27-raspbian-jessie-lite.img


手順



  1. sudo apt-get update; sudo apt-get upgrade -y
    いつもの


  2. sudo apt-get install curl build-essential bc git
    追加パッケージ


  3. rpi-updateで、ファームウェアとかアップデートして、再起動

    sudo apt-get install -y rpi-update
    
    sudo rpi-update
    #
    #2016-05-27のカーネルなら、このハッシュで取得
    # >Linux raspberrypi 4.4.11-v7+ #886 SMP Thu May 19 15:20:49 BST 2016 armv7l
    #sudo rpi-update 48cfa89779408ecd69db4eb793b846fb7fe40c4b
    #
    sudo reboot



  4. カーネルのソース取得とモジュールビルド環境の準備

    # ファームウエアのハッシュから、カーネルのハッシュを取得して、`Module7.symvers`とカーネルのソース取得
    
    #
    FIRMWARE_REV=`cat /boot/.firmware_revision`
    KERNEL_REV=`curl -L https://github.com/Hexxeh/rpi-firmware/raw/${FIRMWARE_REV}/git_hash`
    echo Firmware Rev: ${FIRMWARE_REV}
    echo kernel Rev : ${KERNEL_REV}
    curl -L https://github.com/Hexxeh/rpi-firmware/raw/${FIRMWARE_REV}/Module.symvers >Module.symvers
    curl -L https://github.com/Hexxeh/rpi-firmware/raw/${FIRMWARE_REV}/Module7.symvers >Module7.symvers
    curl -L https://github.com/raspberrypi/linux/archive/${KERNEL_REV}.tar.gz >rpi-linux.tar.gz
    #
    # rootになる
    sudo -s
    #
    # カーネルソース展開 時間がかかるよ
    HOME=/home/pi
    cd /usr/src
    mkdir rpi-linux
    cd rpi-linux
    tar --strip-components 1 -xf ${HOME}/rpi-linux.tar.gz
    #
    # Module.symversと .configを取得して配置.
    modprobe configs
    gunzip -c /proc/config.gz >.config
    # cp $HOME/Module.symvers Module.symvers ## RPi1 ????
    cp $HOME/Module7.symvers Module.symvers
    #
    # モジュールビルドの準備とリンク.
    time make modules_prepare
    ln -sv /usr/src/rpi-linux /lib/modules/$(uname -r)/build



  5. rtl8812AU_8821AU_linuxのソース取得・ビルド

    # rootじゃなかったら.
    
    sudo -s
    #
    # ソース取得.
    cd /usr/src
    git clone https://github.com/abperiasamy/rtl8812AU_8821AU_linux.git
    cd rtl8812AU_8821AU_linux/
    #
    # Makefileのコンフィグをらずぱい向けにする - README.mdに書いてあった
    # > Edit Makefile and turn on ``CONFIG_PLATFORM_ARM_RPI``, turn off ``CONFIG_PLATFORM_I386_PC``
    sed -i 's/CONFIG_PLATFORM_I386_PC = y/CONFIG_PLATFORM_I386_PC = n/' Makefile
    sed -i 's/CONFIG_PLATFORM_ARM_RPI = n/CONFIG_PLATFORM_ARM_RPI = y/' Makefile
    #
    # ビルド
    make clean
    make
    make install
    modprobe -a 8812au



  6. うごいた

    pi@raspberrypi:~ $ lsusb | grep 8812
    
    Bus 001 Device 004: ID 0bda:8812 Realtek Semiconductor Corp.
    pi@raspberrypi:~ $ lsmod | grep 8812au
    8812au 960323 0
    cfg80211 427855 2 brcmfmac,8812au
    pi@raspberrypi:~ $ ifconfig wlan1 | grep "inet "
    inet addr:192.168.41.11 Bcast:192.168.41.255 Mask:255.255.255.0



(追記) MediaTek MT7610U (RT2860) - ID 0e8d:7610 MediaTek Inc.



  • https://github.com/xtknight/mt7610u-linksys-ae6000-wifi-fixes.git

    # rootじゃなかったら
    
    sudo -s
    #
    # MediaTekのダウンロードサイトからもってくるアーカイブと、エラーになった
    ## MT7610U USB 9/16/2013 V3.0.0.2
    ## wget http://s3.amazonaws.com/mtk.cfs/Downloads/linux/mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2
    ## tar xjf mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2
    ## cd mt7610u_wifi_sta_v3002_dpo_20130916
    #
    # ので、ビルドが通ったものをgit clone
    # git clone https://github.com/coolshou/mt7610u.git
    # cd mt7610u
    #したけど↑は、うまく設定できなかった。ので別のもの
    #
    cd /usr/src
    git clone https://github.com/xtknight/mt7610u-linksys-ae6000-wifi-fixes.git
    cd mt7610u-linksys-ae6000-wifi-fixes
    make
    make install
    #
    #
    #sed -i 's/SSID=11n-AP/SSID=/' /etc/Wireless/RT2870STA/RT2870STA.dat
    #sed -i 's/AuthMode=OPEN/AuthMode=WPA2PSK/' /etc/Wireless/RT2870STA/RT2870STA.dat
    #sed -i 's/EncrypType=NONE/EncrypType=AES/' /etc/Wireless/RT2870STA/RT2870STA.dat
    modprobe -a mt7610u_sta



    • sudo vi /etc/network/interfaces


      /etc/network/interfaces

      ...
      
      # 以下追加
      allow-hotplug ra0
      iface ra0 inet manual
      wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf




    • 動いた

      pi@raspberrypi:~$ lsusb | grep 7610
      
      Bus 001 Device 005: ID 0e8d:7610 MediaTek Inc.
      pi@raspberrypi:~$ lsmod | grep 7610
      mt7610u_sta 876773 0
      cfg80211 427855 2 brcmfmac,mt7610u_sta
      pi@raspberrypi:~$ ifconfig ra0 | grep "inet "
      inet addr:192.168.41.13 Bcast:192.168.41.255 Mask:255.255.255.0





その他


  • (試していない) Raspberry Pi 1/Zero対応?
    cp $HOME/Module7.symvers Module.symvers のところの7をとる???
    => cp $HOME/Module.symvers Module.symvers


  • rpi-updateで取得すると、/boot/.firmware_revisionにファームのハッシュが入って、それを利用して、カーネルソースとか取得してる模様..



  • ↓のエラーは、sudo apt-get inatall bc をやる。

    include/linux/jiffies.h:10:33: fatal error: generated/timeconst.h: No such file or directory
    
    #include <generated/timeconst.h>
    ^
    compilation terminated.


  • テストするとき sudo wpa_supplicant -iwlan1 -c /etc/wpa_supplicant/wpa_supplicant.conf # -Bをつけるとデーモン化


  • 5GHzのとこにつなぐにはどうすれば..