好了,既然说是折腾,那就不是一两下子就顺利搞下来的,且听我把它一一道来。
关于烧录系统,一开始我是用的NOOBS,因为里面囊括了几大系统,任君选择,但是当我后面编译完内核,想把内核更新到SD卡里的时候,就悲剧了,怎么想也没想到这个系统居然会使得linux下无法识别SD卡的分区。
所以这里我建议使用 RASPBIAN
下载地址如下:
https://www.raspberrypi.org/downloads/
把系统下载下来之后,可以选择用windows或者linux环境把系统烧录进SD卡里, 下面我介绍一下linux下的方法吧,windows的就不提了。
不管SD卡里面是否已经有系统了,建议用windows下的SDFormatter
,打开SDFormatter,Drive中选择你的SD卡,不用管Size多大,直接点格式化,格式化完之后,有系统的就会恢复到完整的大小。
将SD卡插入电脑,确认SD卡是否有挂载,如果有挂载需要先unmount
,
可以在SD卡插入前后,
ls /dev/ | grep sd
看插入的SD卡为哪一个设备文件,假如是sdb1,那么就执行
umount /dev/sdb1
接着,我下的RASPBIAN系统是raspbian-jessie-lite,下载后的文件名为2015-11-21-raspbian-jessie-lite.zip
在linux下解压:
unzip 2015-11-21-raspbian-jessie-lite.zip
cd 2015-11-21-raspbian-jessie-lite/
ls
你就能发现有一个2015-11-21-raspbian-jessie-lite.img
文件。
接下来就使用dd
命令将镜像写到SD卡中
bs代表一次写入多大的块,是blocksize的缩写,4M一般都没问题,如果不行,试试改成1M,if参数为下载的镜像的路径(应该是input file缩写),of后参数为设备地址(应该是output file的缩写,linux上一切都是文件)千万不要写错这里的参数,否这你可能丢失硬盘所有数据。
这里要注意,dd
命令没有进度显示的。耐心等待几分钟吧。
sudo dd bs=4M if=2015-11-21-raspbian-jessie-lite.img of=/dev/sdb1
当然如果你非常想看到此时的拷贝进度也是可以的。CRTL
+ALT
+T
打开另一个终端,执行下面命令
sudo pkill -USR1 -n -x dd
好了,到这里系统就烧录到SD卡里了,移除SD卡,把SD卡插入Pi中吧。
说到下载源代码,真是折腾不息。
http://elinux.org/Raspberry_Pi_Kernel_Compilation#Use_the_provided_compiler
上面网址上介绍了如何下载源代码,和编译内核等,一开始一看是用git clone,我就没想下,因为实在是太慢了,后来想到下载ZIP,但是下载下来的ZIP文件的md5和压缩包里带的md5对不上,编译又老是报缺少什么文件,所以ZIP文件的方法不可取。
我这里贴上自己的方法,供大家参考:
git init
git clone --depth 1 git://github.com/raspberrypi/linux.git
git clone --depth 1 git://github.com/raspberrypi/firmware.git
git clone --depth 1 git://github.com/raspberrypi/tools.git
这个方法,请耐心等待,我当时的下载平均速度大概在30Kbit/s左右,大概下了几个小时,而且是三个终端同时下载。
下载完之后,就有三个文件夹了,firmware, tools, linux.
进入linux文件夹,保证内核文件夹干干净净,
cd linux/
make mrproper
清干净之后,就需要.config
文件了,没有.config
,要自己配置,比较麻烦,我们可以用已经在跑的树莓派的.config
,这样不需要重新配置内核了。
那么如何获取.config
呢?
进入烧录好的树莓派,
uname -r
cd /lib/modules/|uname -r|/build
make mrproper
sudo modprobe configs #这会生成 /proc/config.gz
gzip -dc /proc/config.gz > .config
好了,.config
已经搞到手了,将.config
复制到刚刚的linux文件夹下,
然后我们进入到tools文件夹,找到交叉编译链,
ls ../tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-
如果直接用刚刚拷贝的.config
的话,执行以下命令:
make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- oldconfig
如果需要自己再配置,可以执行下面的命令:
make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- menuconfig
配置完之后,就可以编译了,执行下面的命令:
make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-
好了,这个过程,可以等一段时间了,喝杯茶什么的。
编译完之后,你就可以在arch/arm/boot/
里面找到编译出来的zImage
。