一、关于开源硬件
开源硬件的概念简单理解就是电子硬件的设计详细参数是公开的,比如电路图、材料清单和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 |
暑假实习结束,本想乘着还没开学早点回家,这几天台风“苏迪罗”在福建莆田那边登录,广东这边受影响还是比较大的,所以只好等多几天天气好转了再回了。