一、關於開源硬件
開源硬件的概念簡單理解就是電子硬件的設計詳細參數是公開的,比如電路圖、材料清單和PCB布局等等。
主要類型:Arduino、CubieBoard、RaspberryPi、PcDuino、BeagleBone、KiWIBoard和Mixteil
開源中國社區-開源硬件專區http://www.oschina.net/hardware
二、選擇樹莓派RaspberryPi
比較熱門的開源硬件主要有Arduino、樹莓派和BeagleBone。如何選擇適合自己開發的開源硬件?
①Arduino主頻16MHz,價錢在40$以內,與外部設備的連接較好,不支持Linux操作系統。
②BeagleBone 處理器是ARMv7 Cotex-A8架構的AM335x,主頻1GHz,支持Linux操作系統,據說是為Linux系統玩家量身打造的產品。硬件擴展性強,支持網絡,不帶HDMI視頻輸出,價錢稍貴於其他兩款。和樹莓派的區別到此處一看http://www.geekfan.net/5246/
③樹莓派主頻標准情況下700MHz,超頻時可達1.5GHz,有嵌入式電腦、卡片電腦的稱號,價格便宜35$,支持Linux操作系統,支持極好的圖像界面和視頻輸出,支持網絡。官方主頁https://www.raspberrypi.org/ 。目前標准進口樹莓派主要分1代和2代。1代又分A、A+、B、B+,2代目前只有B型。主要區別是,1代的處理器是單核的博通BCM2835,該處理器是ARMv6 ARM11架構的,2代的處理器目前使用的是4核的博通BCM2836,屬於ARMv7 Cotex-A8架構,正常最大最大主頻900MHz,官方說是性能是1代的6倍。各型號之間的其他區別主要體現在內存大小、接口支持、接口數量上。
樹莓派Linux開發:到官方網站下載RASPBIAN系統固件,制作啟動SD卡(SD卡最好4G以上,class4以上),如果要自己編譯內核需要從制作的SD卡中把config.gz文件拷貝出來作為內核源碼的配置文件,詳細說明見后邊。樹莓派應用編程方面非常方便,開發環境直接在樹莓派上進行搭建然后直接在上面開發,這一點是和其他ARM9,ARM11,210開發不一樣的地方。考慮到開發成本和視頻輸出的需求,選擇樹莓派進行開發。接下來的內容是關於我上手樹莓派時的學習筆記。
三、開發前准備工作
硬件准備好就要開始為開發做一些准備工作了,主要是平台的搭建,開發源碼工具的准備。
①下載樹莓派2B固件:
官方網站https://www.raspberrypi.org/downloads/
固件選擇:RASPBIAN——官方Linux操作系統
制作啟動SD卡:
可以windows下使用軟件進行燒寫:下載工具http://fedoraproject.org/wiki/Fedora_ARM_Installer
也可以在Linux主機上使用”dd”命令進行燒寫:指令
umount /dev/sdb* (SD的所有分區都要卸載)
sudo dd bs=4M if=2015-05-05-raspbian-wheezy.img of=/dev/sdb
查看燒寫進度:sudo pkill -USR1 -n -x dd
②在Linux主機下開發:安裝搭建交叉編譯環境
開發工具包比較大有500多Mb,有下面兩種方式進行下載
Windows端:https://github.com/raspberrypi/tools
Ubuntu端:確保樹莓派可以上網,確保安裝git工具:sudo apt-get install git
創建存放交叉工具鏈源碼的文件夾:mkdir rpi2b ; cd rpi2b
獲取工具鏈源碼:git clone git://github.com/raspberrypi/tools.git 速度特慢!我最后選擇第1種方式。
把壓縮包放到Linux下解壓,進入工具解壓目錄cd arm-bcm2708
ls arm-bcm2708 有下面這4個目錄:
arm-bcm2708hardfp-linux-gnueabi
arm-bcm2708-linux-gnueabi
gcc-linaro-arm-linux-gnueabihf-raspbian 用於32位Linux開發主機
gcc-linaro-arm-linux-gnueabihf-raspbian-x64 用於安裝64位Linux開發主機搭建交叉編譯工具量。
我把 *x64這個目錄里的文件目錄拷貝到/opt/rpi/4.8.3目錄下面
配置環境變量:
修改/etc/environment,即添加后面那一句
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm-gdb/bin:/opt/EmbedSky/4.4.6/bin:/opt/rpi/4.8.3"
或者修改/etc/bash.bashrc,后面添加
export PATH=$PATH:/opt/rpi/4.8.3/bin
使生效:source /etc/environment 或 source /etc/bash.bashrc
測試:(a)arm-linux-gnueabihf-gcc -v 看版本號 (b)寫個測試程序編譯:arm-linux-gnueabihf-gcc hello.c -o hello,放到樹莓派上運行.......
我在Ubuntu上安裝交叉編譯環境主要考慮到之后如果要編譯樹莓派的內核驅動的話需要用到。如果只是編譯應用程序就直接在樹莓派上搭建編譯環境就可以了。
在樹莓派上搭建編譯環境:
把上面的arm-bcm2708-linux-gnueabi 文件夾中的內容拷貝到樹莓派上,然后修改環境變量,方法和主機上基本一樣,不再累述。
③讓樹莓派支持SSH登錄:
如果當前樹莓派已經登錄了圖形桌面系統,打開終端,輸入sudo raspi-config進入配置菜單,選擇SSH,然后選擇Enable,重啟就可以使用了。支持SSH之后就可以使用secureCRT來登錄樹莓派,同時也可以使用cuteFTP工具來進行傳輸文件。
④實現NFS
首先確保Ubuntu支持NFS
sudo -s
確定樹莓派已安裝nfs-common:ls /etc/init.d/nfs-common
方法一:
nano /etc/fstab
在最后一行輸入:
192.168.1.106:/home/clbiao/nfs /mnt/nfs nfs _netdev,defaults,user,auto,noatime,intr 0 0
重啟樹莓派NFS:service nfs-common start
方法二:
直接指令掛接NFS指令:sudo mount -t nfs -o wr 192.168.1.106:/home/clbiao/nfs /mnt/nfs
⑤安裝wiringPi庫(在樹莓派環境下)
下載庫鏈接:https://git.drogon.net/?p=wiringPi;a=summary
或者通過Git clone下載:git clone git://git.drogon.net/wiringPi
進入目錄:
./build 開始安裝
默認安裝在/usr/local/lib和include目錄下
gpio -v 安裝成功否?
寫測試程序
⑥常用指令:
立即關機:root權限
shutdown -h now
halt
poweroff
init 0
更多對樹莓派的配置可以到這個網站下面找:http://www.geekfan.net/category/hardware/raspberry-pi-hardware/
四、嘗試編譯樹莓派Linux內核:
解壓Linux內核源碼,嘗試編譯
登錄樹莓派獲取當前內核的配置文件
ls ./proc/config.gz
cp ./proc/config.gz ./boot/
通過SD把config.gz文件拷貝到Ubuntu開發主機中
zcat config.gz > .config
查看內核版本:
root@raspberrypi:/# uname -a
Linux raspberrypi 3.18.11-v7+ #781 SMP PREEMPT Tue Apr 21 18:07:59 BST 2015 armv7l GNU/Linux
修改頂層Makefile
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
==》
ARCH ?= arm
CROSS_COMPILE ?= /opt/rpi/4.8.3/bin/arm-linux-gnueabihf-
root@ubuntu:~/rpi/linux-rpi-3.18.y# make menuconfig
make: *** arch/arm: Is a directory. Stop.
出現這種錯誤是因為Makefile文件“ARCH ?= arm ”的arm后面不能有空格
make menuconfig
make zImage
測試編譯的內核鏡像
然后使用RpiTools/mkimage/*.gz工具將zImage轉換成kernel.img
編譯內核模塊:
make modules
make modules_install INSTALL_MOD_PATH=/home/clbiao/rpi/linux-rpi-3.18.y/modules
安裝新內核:【要在Linux下完成】
cd /mnt
mkdir sdb sdb1 sdb2
mount /dev/sdb2 /mnt/sdb2
把kernel.img復制到SD卡的sdb2中的boot目錄:
cp ~/rpi/linux-rpi-3.18.y/kernel-new.img /mnt/sdb2/boot/
修改樹莓派引導程序的啟動腳本:未完待續………….
五、遇到的問題
問題. HDMI轉VGA顯示不了問題
解決.事情是這樣的,HDMI接口轉VGA接口線網上賣的有好幾種,如下,然而我並沒有詳細了解就倉促下了單。
①無源HDMI轉VGA線—不帶芯片的:一般10塊錢以內可以買到
②無源HDMI轉VGA線—帶芯片的:價格在40-50之間
③有源HDMI轉VGA線—帶芯片的:價格100以上,甚至200以上
有時候,看價錢就應該敏感的察覺到商品的組成成分啊!!!還有就是一定要記得看評論,里面說不定有掉進坑里的人。VGA接口需要的是模擬信號,HDMI接口需要的數字信號。如果你的顯示器只是單純的顯示器,而沒有集成顯卡,比如電視機、電腦獨立顯示器、投影儀,那么第①種線就一定不能使用!!!其他兩種還要根據情況來選擇,根據網上資料,如果你的輸出HDMI信號的設備本身供電電源就不大(一般小於2A),就最好選用第③種有源的,VGA顯示器對電流吸入量比較大,這樣才能確保設備正常工作。開始還以為是網上說的那樣是配置問題,然並卵,不過也記錄一下這個配置過程:
1>備份樹莓派FAT32分區里面的config.txt文件為config.txt.bak
2>更改樹莓派FAT32分區里面的config.txt文件內容為如下配置:
#強制使用HDMI輸出
hdmi_force_hotplug=1
#HDMI信號增強
config_hdmi_boost=4
#HDMI輸出適配於計算機顯示器
hdmi_group=2
#HDMI輸出的分辨率及刷新頻率
hdmi_mode=9
#禁止樹莓派檢測顯示器分辨率,直接使用配置文件中制定的分辨率輸出
hdmi_ignore_edid=0xa5000080
#禁止黑邊
disable_overscan=
附:計算機顯示器常用的分辨率
hdmi_mode=4 | 640x480 | 60Hz |
hdmi_mode=9 | 800x600 | 60Hz |
hdmi_mode=16 | 1024x768 | 60Hz |
hdmi_mode=23 | 1280x768 | 60Hz |
hdmi_mode=32 | 1280x960 | 60Hz |
hdmi_mode=35 | 1280x1024 | 60Hz |
hdmi_mode=39 | 1360x768 | 60Hz |
hdmi_mode=47 | 1440x900 | 60Hz |
hdmi_mode=81 | 1366x768 | 60Hz |
hdmi_mode=82 | 1920x1080 | 60Hz |
暑假實習結束,本想乘着還沒開學早點回家,這幾天台風“蘇迪羅”在福建莆田那邊登錄,廣東這邊受影響還是比較大的,所以只好等多幾天天氣好轉了再回了。