最近手上拿到一塊香蕉派的R2,這塊板子可以用作路由器,所以決定在板子上面跑一下Openwrt。
R2的外觀長這個樣子,看起來還是比較酷的;
- 硬件介紹
- CPU 是MTK的4核芯片mt7623n,搭配mt7530的交換芯片和mt6625的Wifi & BT芯片,可以看出R2在硬件上具備路由器的強健實力。
鏈接:http://wiki.banana-pi.org/Banana_Pi_BPI-R2#Introduction
- 軟件介紹
- BananaPi-R2可運行Openwrt,Ubuntu等Linux開源系統;
- BananaPi的論壇用戶多數是國外創客,活躍度也是十分的高,BananaPi在國外開源社區的影響力可見一斑。
論壇鏈接:http://forum.banana-pi.org/
簡單介紹完后,接下來我下載openwrt的repo(代碼庫),來感受一下R2運行openwrt的性能;
- Github代碼倉庫:https://github.com/garywangcn/bpi-r2_lede/tree/bpi-r2-on-lede-v1
- Branch選擇v1版本
- 我的PC使用的Ubuntu 16.04,按快捷鍵"Ctrl+Alt+T"打開Terminal終端,輸入下面的命令:
1 jack@jack: git clone https://github.com/garywangcn/bpi-r2_lede.git 2 jack@jack: cd bpi-r2_lede 3 jack@jack: cat README
- 下載開源的代碼后,首先要學會看README
- 通過“make menuconfig”去配置你的openwrt,如果剛開始接觸還不精通的話,建議先用默認的配置;“make menuconfig”配置后的文件會保存在".config"文件中,".+文件"在Ubuntu中表示為隱藏文件,用“ls -a”可以查看到。
- 如果要編譯該工程,需要安裝2號框中提到的相關組件,在Ubuntu中使用“apt-get install xxx”就可以安裝了;比如要安裝2號框圖中的“gcc”,則使用命令“apt-get install gcc”。
- 執行“make menuconfig”后,這個時候發現模塊是非常少的,這個時候看3號框可以通過執行以下兩行命令去更新和安裝openwrt的相關模塊和組件
1 jack@jack: ./scripts/feeds update -a 2 jack@jack: ./scripts/feeds install -a
- 執行完后,再執行“make menuconfig”會發現配置界面多了很多模塊和組件。
- 接下來,執行“make -j1 V=s”命令去編譯工程,第一次編譯工程的時間會比較久,如果你的PC是多核的芯片可以采用多線程的方式編譯,我可以用“make -j4”去編譯工程,這樣速度會快一些。
- 編譯完成后,會在“build_dir/target-arm_cortex-a7+neon-vfpv4_musl_eabi/linux-mediatek_32”目錄下生成編譯后的鏡像文件:
- mtk-bpi-r2-SD.img
- mtk-bpi-r2-EMMC.img
- 另外還有一個文件也要注意一下,就是位於“bin/targets/mediatek/32/lede-mediatek-32-bananapi,bpi-r2-sysupgrade.tar”,這個文件可以用於系統升級。
有了鏡像文件后,接下來我們來燒錄鏡像;
- 首先要准備一個至少8G大小的SD卡,SD卡讀卡器
- 插上PC上的USB接口后,如何在Ubuntu中找到自己的SD卡的盤符呢?我使用的辦法是"fdisk -l",使用這個命令可以查看PC上的所有存儲設備,我的SD卡信息如下
1 jack@jack: fdisk -l 2 ************************************************************ 3 Disk /dev/sdf: 29.7 GiB, 31914983424 bytes, 62333952 sectors 4 Units: sectors of 1 * 512 = 512 bytes 5 Sector size (logical/physical): 512 bytes / 512 bytes 6 I/O size (minimum/optimal): 512 bytes / 512 bytes 7 Disklabel type: dos 8 Disk identifier: 0x4d1bc8d1 9 10 Device Boot Start End Sectors Size Id Type 11 /dev/sdf1 8192 62332199 62324008 29.7G c W95 FAT32 (LBA)
- 可以看到我的SD卡是32Gb大小的,然后每個sector單元是 512 bytes,硬盤類型為dos,只有一個分區"/dev/sdf1";
- 這里有人可能會說,這里顯示的明明是29.7Gb,我問為什么說我的SD卡是32Gb的呢;
- 我給大家引申一下,為什么買電腦的時候,說買500GB,買回來看硬盤大小實際比500小一些;這是因為存儲設備生產商是按照1000為計量單位去計算的,而我們的計算機是以1024為計量單位去計算的,怎么理解?
- 這里我的SD卡大小是 31914983424 bytes,按照生產商的1000位計量單位去計算,除以109 計算出來就是32Gb;但是按照計算機的計量單位1024去計算,31914983424 ÷ 1024 ÷ 1024 ÷ 1024 = 31914983424 ÷ 230 ≈ 29.7
- 引申完后,我們再回到鏡像燒錄這里,那么如何燒錄系統鏡像到SD卡呢?這里就引出了Linux的“dd”命令,采用如下命令就可以把鏡像寫入到SD卡中了:
1 jack@jack: dd if=mtk-bpi-r2-SD.img of=/dev/sdf 2 200192+1 records in 3 200192+1 records out 4 102498308 bytes (102 MB, 98 MiB) copied, 10.0212 s, 10.2 MB/s
- 這里在給大家引申一下“dd”命令,在Ubuntu的命令行中執行“man dd”可以看到對dd的介紹;
- “Copy a file, converting and formatting according to the operands.”意思就是拷貝文件,同時可以根據指定的大小進行轉換;如何理解呢?
- 這里我舉個例子,我測試一下我的硬盤讀寫速度,在此之前先介紹兩個文件,/dev/null 和 /dev/zero;
- /dev/null 稱為空設備,我們可以將一切不用的數據都輸入其中“丟掉”,可以直接理解為“垃圾桶”;
- /dev/zero 是一個特殊的文件,它能夠無限的提供數據0x0;
- 第1行我把硬盤sda的數據以1Mb的塊大小寫入虛擬設備null中,一共寫入1024個塊,也就是總共寫入1Gb;第2行表示我寫入硬盤1Gb的0x0;通過這種方式就可以測試硬盤的讀寫能力;你可以在電腦上插上存儲設備試一試,看看其讀寫性能。
1 jack@jack: dd if=/dev/sda of=/dev/null bs=1M count=1024 2 jack@jack: dd if=/dev/zero of=/dev/sda bs=1M count=1024
- 燒錄完成后,查看硬件接口圖:http://wiki.banana-pi.org/Banana_Pi_BPI-R2#Hardware_interface,把SD卡插入到BananaPi-R2的SD卡槽中,接上12V/2V的電源,接上Debug串口;
- 這里我使用的串口線是FT232RL USB轉串口TTL的線,這里也有一個知識點,就是為什么PC的USB接口與板子的串口通信需要轉電平信號呢?
- 因為兩者的通信接口標准不同,導致電平信號有差異,PC上USB接口是USB標准,單片機電平是TTL標准,為了能讓彼此能識別,這個時候就需要一顆USB轉TTL的轉換芯片,如果沒有轉換芯片,電腦上顯示的板子串口信息將會是亂碼;我們買的USB轉串口的線一般都是內置了轉換芯片的,所以看到的串口信息是正常的。
- 啟動完成后,界面如下:
1 BusyBox v1.26.2 () built-in shell (ash) 2 3 _________ 4 / /\ _ ___ ___ ___ 5 / LE / \ | | | __| \| __| 6 / DE / \ | |__| _|| |) | _| 7 /________/ LE \ |____|___|___/|___| lede-project.org 8 \ \ DE / 9 \ LE \ / ----------------------------------------------------------- 10 \ DE \ / Reboot (SNAPSHOT, r4774-8cb7cc2) 11 \________\/ ----------------------------------------------------------- 12 13 === WARNING! ===================================== 14 There is no root password defined on this device! 15 Use the "passwd" command to set up a new password 16 in order to prevent unauthorized SSH logins. 17 -------------------------------------------------- 18 root@LEDE:/# uname -a 19 Linux LEDE 4.9.44 #0 SMP PREEMPT Tue Jun 26 11:00:25 2018 armv7l GNU/Linux 20 root@LEDE:/#
- 到這里,Openwrt就成功在R2上面運行起來了;后續我會發布更多的玩法,和大家一起玩轉開源。
歡迎大家批評指正,轉載請注明出處,多謝。


