Ubuntu 16.04 (x64)树莓派B+(Raspberry Pi B+)源代码编译

树莓派上的操作


1.升级到最新版内核保证与下载的内核源码版本一致

2.升级完整后重启

3.查看内核版本

4.把最新版本的内核配置保存到.config中,以备以后编译内核使用

文件被存储到了/proc/config.gz中。

目前最新版本是4.4.12,因此下面的编译都是针对4.4.y这个分支进行的。

Debian/Ubuntu下编译


1.获取内核源代码

2,以下步骤时间很长,可以在睡觉前执行,并且可能需要重试几次才行,建议同时开三个Shell一起执行。

3.给予整个rpi-tools目录执行权限,默认可能没有执行权限

4.整个的rpi-linux的文件夹的所有者更改为当前用户,否则存在一定程度的编译问题,特别是代码从其他系统上拷贝过来的情况

5.设置编译器的路径

6.配置编译类型

如果提示是否增加新的驱动支持,默认全部选择否(输入大写的字母N,小写字母无效),否则会导致无法编译通过。

7.开始正式编译内核,最后的数字改成比你的CPU核心数量+1以提交多线程编译效率。

8.编译错误修正,如果提示如下错误

这个现象的原因是 git 在检出代码的时候,没有正确处理软连接,我们只需要重新处理一次即可。如下:

9.查看生成的内核镜像文件

生成的zImage就是我们需要的kernel.img

10.编译modules

安装编译好的内核

Ubuntu下面,SD卡会自动挂载,默认挂载到了/media/目录下面,如果是使用NOOBS安装的话,系统目录是固定的,执行如下命令拷贝到目标SD卡上面

参考链接


树莓派(Raspberry Pi)2B编译安装Robopeak USB屏幕驱动

树莓派安装的系统是Linux raspberrypi 4.1.19+,以下的命令都是通过SSH在树莓派的系统上直接执行的。

1.编译树莓派内核

参照Ubuntu 16.04 (x64)树莓派B+(Raspberry Pi B+)源代码编译

2.安装git

3.安装编译工具

我们在编译树莓派内核的时候,使用的gcc的版本是4.8.3版本(rpi-tools目录下),但是遗憾的是,树莓派自带的gcc的版本却是4.6.3,用这个版本的gcc编译出来的内核驱动可能会直接崩溃的,我们最好手工指定使用的gcc跟我们编译内核的时候的版本一致。换句话说,如果哪天我们编译内核的gcc再次升级,那么我们也需要手工在树莓派内部指定相同版本。

4.拷贝刚刚编译树莓派内核的源代码到当前的树莓派系统磁盘

从树莓派上拔下SD卡,插入到编译内核的Ubuntu 16.04 (x64)系统上,拷贝源代码

5.建立内核模块库目录的链接

重新插上SD卡,并且启动进入树莓派系统

6.检测源代码目录下是否存在Module.symvers

这个文件在我们编译内核之后应该是存在的,如果不存在,需要重新编译内核。
没有Module.symvers或用错了Module.symvers都可能会造成你加载模块时报Exec format error.

7.将当前正在使用的系统的内核配置作为编译内核时候的配置

8.生成编译内核所需要的文件

9.修改驱动程序的默认版本号与本系统相同

修改里面的内容为使用uname -r命令显示的内容,此系统版本显示为4.4.12+,修改后的内容如下:

如果不进行上述的修改,会导致编译出来的内核文件在加载的时候提示disagrees about version of symbol module_layout,而无法成功加载驱动。

10.下载驱动程序源代码

11.切换到驱动程序的源代码目录

12.编译源代码

编译完成后使用

查看是不是与使用

显示的完全相同,如果不完全相同,则需要继续进行上面的调整。

13.安装编译好的驱动

执行完成后,会在/dev目录下面生成fb1这个文件。

执行

如果出现花屏,则驱动一切正常。

此处存在一个大坑。如果按照说明文档把驱动拷贝到

或者直接运行,

则运行时候报错:

这个问题是由于驱动存放的目录不正确导致的。

14.将RoboPeakMini USB显示器驱动程序的内核模块设定为自动启动

然后在文件尾部增加一行rp_usbdisplay

参考链接


树莓派(Raspberry Pi)2B连接隐藏了SSID的路由器

树莓派自带的系统在使用USB WiFi网卡的时候,默认情况下是不支持连接隐藏了SSID的路由器,网上搜索了一下,找到了配置的方法,本方法仅针对使用WPA2-PSK模式加密的隐藏了SSID的路由器,树莓派安装的系统是Linux raspberrypi 4.1.19+

在文件后面增加如下内容:

如此配置之后,重启一下树莓派,重启之后,会发现已经可以自动连接配置的的WiFi路由器了。

编译vim,提示找不到tgetent()

在树莓派上面编译VIM 的时候,提示找不到 tgetent()

就总是提示错误:

解决方法

安装ncurses-dev

Raspberry Pi(树莓派)国内软件源

树莓派自带的软件源是

由于网站在国外,导致下载速度非常慢,因此需要修改为国内镜像站点即可。

Raspberry Pi(树莓派)国内软件源:

修改配置文件

推荐使用如下命令直接替换成国内源(中科大的服务器):

树莓派Raspberry Pi上手报告

raspberry-pi-logo背景

关于树莓派的背景介绍在网上已经很多了,在树莓派的官方网站上也有一个长篇大论。这里只是简单的列一下:

  1. 厄普顿(Eben Epton)在2006年已经意识到要为儿童提供一种廉价的计算机,因为他觉得从2000年之后,报读计算机系的优等生无论从数量上还是技术水平上都一年 不如一年(the year-on-year decline in the numbers and skills levels of the A Level students applying to read Computer Science in each academic year,貌似这段是请中国人写的,因为除了中国人之外,想不出哪里的人会用read Computer Science来写报读计算机专业)。而90年代的学生大部分都是有经验的编程爱好者(experienced hobbyist programmers)。
  2. 厄普顿觉得这样的原因在于:家庭PC机过于昂贵,所以父母不肯给小孩在上面进行一些实验。所以他想做一个廉价的,可以和老式计算机一样,一启动就 进入编程环境的计算机。(其实我觉得不是过于昂贵,当年的Apple II和中华学习机也是要几千块一台的,真正原因是PC从极客用品变成了一种日常消费品,父母同样不会让你拿家里的冰箱微波炉拆开做实验的)

后来的故事大家也知道了,由于他成立了树莓派基金运作这个事情,宣称要做一个只有25美金的家用电脑,而且体积和信用卡一样大,可以接电视,可以播高清视频,所以一下子吸引了眼球,以至于订购的人刷爆了他的网站。

订购

淘宝上很早就有了,但是有点贵,我也不想断了人家的财路,也不想在这里帮别人做广告,反正最后我是以35美金加中国的17%的增值税加较高的运费(从上海到广州要40块钱)买到的,到手的价格还算合理。订购后2个星期内到货。

开箱

整块板卡的做工不错,拿在手上确实觉得很小,SD卡的插槽有点粗糙,见照片。raspberry-pi-1-680x1024 raspberry-pi-2-1024x680 可能为了节省体积,电路板上没有任何可以用来固定的螺丝孔,所以一定要等有人做出专门的外壳或者专门的架子才能固定,树莓派基金承诺今年夏天会推出 外壳。电源接口是microUSB而不是miniUSB,和我的C8500的接口一样,个人感觉如果是miniUSB会通用一点。由于只有两个USB口, 但是正常使用除了接键盘鼠标外,大部分人还是需要接多一个USB硬盘的,所以需要配合一个USB HUB来使用,而且这种板卡的USB口的驱动能力不会很强的,所以还必须是有源的USB HUB才能接大点的硬盘。

加电

没有插SD卡,加电时除了电源灯之外,不会有任何的反应,HDMI没有任何输出,树莓派的说明书中提到可以通过串口输入命令,但是它的串口是通过那两排GPIO的脚的其中三个脚印引出的,而且是TTL电平的,必须通过驱动芯片才能和PC机的串口连接。raspberry-pi-serial_sm

准备SD卡

新手建议使用NOOBS 版本的安装,目前的最新版本是1.4.0,下载网址为 http://www.raspberrypi.org/downloads/,参考下载的zip文件的 ”INSTRUCTIONS-README.txt“ 里面的介绍,就可以简单安装。手动安装的话,参考如下。 树莓派的官网提供了三个版本的镜像文件,还有无数第三方的镜像,由于是初次接触,还是用官网的Raspbian版本,因为是基于Debian的,所以Debian的一些命令和配置方法可以用得上。还要下载Win32DiskImager工具,用于在Windows下将下载的IMG文件写入到SD卡中。至于为什么把镜像文件直接拷贝到SD卡中是无效的,一言难尽,就和刻录光碟的ISO镜像要用专门刻录镜像的功能,而不能直接把ISO文件刻录到光碟上的道理是一样的。raspberry-pi-diskimager

下载树莓派最新镜像文件,然后把读卡器和SD卡插入计算机,运行Win32DiskImager,选择镜像文件和合适的盘符,如果原来机器上插有其他的USB硬盘或者SD卡,建议在做这件事之前全部拔掉,避免发生选错盘符,把整个USB硬盘资料全部洗掉的情况。 raspberry-pi-3-1024x680 写入完成后,就可以把SD卡插到树莓派上,把HDMI线、鼠标、键盘、网线全部插上。

首次启动

加电后,如果电源灯旁边的绿色的灯(OK)会闪动,就说明SD卡是可用的。这时如果HDMI连接好电视了,电视上就会开始出现启动画面了。raspberry-pi-4-1024x680 接着是熟悉的Linux启动界面,企鹅被替换成了树莓: raspberry-pi-5-1024x680 firstscreen 首次启动将出现系统初始配置的界面,这个界面在也可以在之后的终端窗口中通过sudo raspi-config激活。 由于在初始配置的界面上没有看到有网络配置的选项,所以建议在网络环境中一定要有DHCP,也就是能自动获取IP的网络环境。因为Raspbian的各种软件的安装是需要网络连接支持的。需要用到的功能说明如下:

  • expand_rootfs - 将根分区扩展到整张SD卡,因为整个Image才400多兆,但是现在的SD卡基本都是几个G的,除非SD卡有其他用途,一般建议选择这项,这样可以有足够多的空间来安装各种程序。
  • overscan - 可以扩充或者缩小屏幕的设置,除非一启动就发现显示的内容能刚好填满整个电视的画面。大部分情况下是不能填满或者超过,如果这样就要enable这个,然 后在系统启动之后,更改config.txt中的overscan_left、overscan_right、overscan_top和 overscan_bottom的内容,如果显示内容超出屏幕的范围(显示不全),就要设置这些值为正值,如果是1080p,一般设置为48。如果显示的 内容不能填满屏幕,则设置这些值为负值,如果是1080p,一般设置为-48。具体可以更加显示的结果,以16为步长进行调整。
  • configure_keyboard  - 这个很重要,前面的屏幕选默认值:Generic 105-key (Intl) PC,但在Keyboard layout:时,显示出来的都是English(UK)的,要选择Other,然后在里面选择English(US),否则会出现键盘的一些符号不对或 者对调,比如引号”和@符号对调,#号变成英镑符号等等。之后的两个屏幕都选择默认值就可以了,到了:Use Control+Alt+Backspace to terminate the X server? 时,选择Yes,表示用这个可以终止X Server,当整个X-Window死掉的时候可以用。
  • change_pass - 默认的用户名是pi,密码是raspberry,一般登录时不需要输入,但是用ssh远程连接时要用到这个用户名和密码,这里可以更改密码。
  • change_locale - 更改语言设置。在Locales to be generated: 中,选择en_US.UTF-8和zh_CN.UTF-8。在Default locale for the system environment:中,选择en_US.UTF-8(等启动完机器,装完中文字体,再改回zh_CN.UTF-8,否则第一次启动会出现方块)。
  • change_timezone - 更改时区,这个很重要,因为树莓派没有内部时钟,是通过网络获取的时间,如果设错时区,那么时间就不正确了,选择Asia - Shanghai,没错是Shanghai,木有Beijing,这是Unix的传统。缩写是CST,不知道是China Shanghai Time还是China Standard Time。
  • memory_split - 按照网上的说法,这个功能有Bug,会导致/boot/start.elf损坏使系统无法启动,所以不要使用这个功能。 可以通过拷贝/boot/下的arm128_start.elf、arm192_start.elf、arm224_start.elf覆盖 start.elf来实现显存和内存的划分。为了能播放高清1080p的视频,至少要分配64M显存给GPU。所以arm224就不能播放1080p高清 视频。
  • ssh - 是否激活sshd服务,应该选择激活,这是当界面死掉后唯一进入机器的通道(如果Kernel没死的话),可以找另外一部机器,用putty或者其他ssh的工具连接到这部机器上,用pi这个用户登录,至少可以实现安全重启。
  • boot_behaviour - 设置启动时启动图形界面,正常肯定是Yes。

设置完成后,选择Finish,会提示是否重启,选择Yes。 重启后,将进入LXDE的X-Window环境,反正都是有桌面图标和开始菜单,应该比较容易掌握使用。

让Raspbian支持中文

一直令我很奇怪的是,即使你用Debian的安装光碟安装系统,如果你把Locale改成了中文的话,系统是不会自动安装中文字体的,直接的效果是 系统的很多信息都用中文显示,但是由于没有安装字体,所以全部变成了方块,所以完全不知道信息的内容是什么, 这个作为系统安装工具我认为是有问题的,因为这样会直接造成系统不可用,基于Debian的Raspbian也有同样的问题。所以如果你在初始设置时,不 小心把系统的Locale设置成了zh_CN.UTF-8,当你进入Raspbian的图像界面时,会马上傻眼了,不知道图标、菜单的内容是什么,因为全 部是方块。所以建议初始设置时,locale尽量用en_US.UTF-8或者en_GB.UTF-8。启动后,双击桌面那个计算机显示器图标,出现提示 符时打入:

将安装文泉驿的开源中文字体.。 中文是可以显示啦,输入呢?Linux下早就有啦,叫SCIM(Smart Common Input Method ),所以只要输入:

就会安装拼音输入法,安装完成后,可以直接打入scim激活,下次启动是会自动启动的。快捷键也是Ctrl+空格。或者直接点击右下角图标选择。 接着运行:

然后选择change_locale,在Default locale for the system environment:中选择zh_CN.UTF-8。然后重启机器,就发现整个环境变成中文的了。 raspberry-pi-home-screen-1024x576

视频播放

标准Raspbian版本中支持树莓派的GPU的播放器好像只有omxplayer,是个命令行程序,没有界面的,也不能拖动。它有很多参数,最常 用的是-o,选项有local和hdmi,表示声音输出到audio out还是hdmi,omxplayer后面跟着要播放的文件名称,不支持wmv,不支持外置字幕。打开终端窗口,出现提示符后输入:

也可以先用cd命令,将当前路径改变到文件所在的目录,文件名就不需要绝对路径了。其实大家会觉得命令行输入非常麻烦,但只要用Tab键进行命令补 齐,用ls列出当前目录的文件,再配合鼠标选择文字,然后按中键(就是按下滚轮)进行连动的复制粘贴,即使没有资源管理器也会发现目录操作可以很快速的。 由于一般媒体文件都是放置在外置的硬盘中,所以这时需要将硬盘接入到USB口上,系统默认会在/media目录下创建和硬盘卷标一样的目录,并将USB硬盘挂接上去,之后就可以访问了。 测试的结果大部分用X.264编码的1080p视频都可以正常流畅播放。唯一一部无法播放的是:[魔术师和兔子].Pixar.Short.Presto.1080p.BluRay.x264.mkv。 这是《变形金刚3》的播放效果:raspberry-pi-6-1024x680 omxplayer的快捷键如下:

Key Action
1 加速
2 减速
j 上一条音轨
k 下一条音轨
i 上一节
o 下一节
n 上一条字幕轨
m 下一条字幕轨
s 显示/不显示字幕
q 退出
空格或 p 暂停/继续
- 减小音量
+ 增加音量
后退30
前进30
后退600
前进600

 

接下来玩什么

1.超频(overclocking)

玩家型的CPU都是支持超频的,通过更改/boog/config.txt中的下列参数可以实现超频:

Option Description
arm_freq frequency of ARM in MHz. Default 700.
gpu_freq Sets core_freq, h264_freq, isp_freq, v3d_freq together.
core_freq frequency of GPU processor core in MHz. It have an impact on ARM performance since it drives L2 cache. Default 250.
h264_freq frequency of hardware video block in MHz. Default 250.
isp_freq frequency of image sensor pipeline block in MHz. Default 250.
v3d_freq frequency of 3D block in MHz. Default 250.
sdram_freq frequency of SDRAM in MHz. Default 400.
over_voltage ARM/GPU core voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V) [1]
over_voltage_sdram Sets over_voltage_sdram_c, over_voltage_sdram_i, over_voltage_sdram_p together
over_voltage_sdram_c SDRAM controller voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V) [1]
over_voltage_sdram_i SDRAM I/O voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V)[1]
over_voltage_sdram_p SDRAM phy voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V)[1]

如何组合参照下表(注意:如果设置了over_voltage,质保就会失效,但是SD卡在你手上它怎么知道你设了?):

arm_freq gpu_freq core_freq h264_freq isp_freq v3d_freq sdram_freq over_voltage over_voltage_sdram
750 255         450    
900 250         500    
900 275         500    
900   450       450    
930 350         500    
1000   500       450 6  
1000   500       500 6  

但是本人没有玩过,会不会发生冒烟、地震、火山爆发或61年一遇的洪水等情况,就不得而知了。

2.Razdroid

实际上就是 Android 4.0  (Ice Cream Sandwich) for Raspberry Pi。根据这个帖子,安卓4.0已经在树莓派上跑起来了,很快就会发布了。这是我非常期待的一个东西,之后就有大量的应用程序可以用了,但是我还是对性能上的表现十分担心,毕竟现在很多手机都是1G以上的CPU和1G内存了。 raspberry-pi-razdroid-1-1024x575 raspberry-pi-razdroid-2-1024x575

3.XBian

XBMC是Linux的媒体中心版,XBian就是XBMC和Raspbian结合的产物,作为播放器应用,这个也应该更加方便,支持的文件格式应该更多,尤其是能支持外置字幕。

4.SSH

最新版本的已经自带SSH ,并且直接就可以登陆成功了,因此不需要特别安装了。 引用 http://www.leiphone.com/news/201406/raspberry-pi-hands-on.html