在 Raspberry Pi 2 上安装 Gentoo - stage 1
Jul 23, 2016
仔细看了下 rpi 的启动步骤,理论上是可行的,经过实践之后发现确实可行.
首先我们需要一个 stage3 和 livecd,和在你的 PC 上安装是一样的.不过呢,rpi 上没有 livecd 这种东西,我们就用 Raspbian 来代替.
首先准备好一个 sd 卡,如果 sd 卡空间是 64G 的话你就不需要优盘,不过我还是建议准备一个优盘.
首先我们下载 Raspbian 的镜像,写到 sd 卡上面.
wget http://vx2-downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2016-05-31/2016-05-27-raspbian-jessie-lite.zip
#镜像链接可能会变,总之下个最新的就好.
unzip 2016-05-27-raspbian-jessie-lite.zip
dd if=raspbian.img of=/dev/mmcblk0
#其中 raspbian.img 是镜像名字,/dev/mmcblk0 是你的 sd 的路径.
PS:任何 Linux 镜像即可,只要你用的顺手.
然后把 sd 卡插到 rpi 里面,开机.用串口/SSH 等方式连上去就好.
我这里接了一只优盘,因为我的 sd 卡太小了.
先下载 stage3
wgethttp://ukginger.net/Gentoo2/releases/arm/autobuilds/current-armv7a_neonvfpv4_hardfp/stage3-armv7a_neonvfpv4_hardfp-20160421.tar.bz2
#这个 stage3 是对应的 vfpv4,也就是没有实现 IEEE 双精度的版本
wget http://ukginger.net/Gentoo2/releases/arm/autobuilds/current-armv7a_neonvfpv4_hardfp/stage3-raspberry-pi-2.tar.bz2
#这个则是 vfpv3,性能上比起 4 弱一点点.
然后分区,格式化.
cfdisk /dev/sda
#直接整个盘分个区.
mkfs.ext4 /dev/sda1
挂载上去.
mkdir -p /mnt/gentoo
mount /dev/sda1 /mnt/gentoo
tar xvpf stage3-armv7a_neonvfpv4_hardfp-20160421.tar.bz2 -C /mnt/gentoo --xattrs
cd /mnt/gentoo
mount --rbind /dev dev
mount --rbind /sys sys
mount -t proc none proc
mount /dev/mmcblk0p1 boot #这里挂载 boot,因为我们要编译内核
接下来就是 chroot.
chroot /mnt/gentoo /bin/bash
source /etc/profile
env-update
进入 Chroot 环境之后我们首先需要更新 Portage Tree.
emerge-websync
同步完毕之后就是调整 make.conf
#vim /etc/portage/make.conf
#添加以下内容
ACCEPT_KEYWORDS="~arm"
MAKEOPTS="-j4"
接下来就是更新 gcc 和 libc
emerge -av1 gcc
gcc-config -l #查看 gcc 版本
gcc-config 1 #选择新的版本
source /etc/profile
emerge -av1 glibc binutils
emerge --update --nodeps -a udev-init-scripts procps
emerge --update -a shadow openrc udev
妥,接下来是 Bootstrap 工具链.
<pre>`cd /usr/portage/scripts
./bootstrap.sh
`</pre>
请大家等待一会,等他 Bootstrap 完成之后就是重新构建系统.
emerge -e @system
这里是清空 @system 之后重新编译预设定的 system 集.(-e = empty tree)
都完成之后就是 stage3 安装了.首先是安装 DHCPCD 和无线支持.
emerge -a dhcpcd wpa_supplicant
rc-update add dhcpcd defaul
cp /usr/share/dhcpcd/hooks/10-wpa_supplicant /lib/dhcpcd/dhcpcd-hooks
然后设定时间.
emerge -a ntp #ntp
rc-update add ntp-client default
rc-update del hwclock default
rc-update add swclock
echo 'Asia/Shanghai' > /etc/timezone
emerge --config timezone-data
设定 Locale
nano -w /etc/locale.gen
#选择你的 locale
locale-gen
eselect locale list
eselect locale set 3 #你想要的 Locale 的序号.
source /etc/profile
编译内核.
emerge -a dev-vcs/git
cd /usr/src
git clone https://github.com/raspberrypi/linux -b rpi-4.7.y
cd linux
make make bcm2709_defconfig
make -j4 zImage modules dtbs
make modules_install
cp arch/arm/boot/dts/*.dtb /boot/
cp arch/arm/boot/dts/overlays/README /boot/overlays/
cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
scripts/mkknlimg arch/arm/boot/zImage /boot/kernel7.img
然后更新系统,并设定 root 密码
emerge -auvND @world
passwd root
然后我们更改 cmdline.txt,将它指向 Gentoo 分区.
#vim /boot/cmdline.txt
root=/dev/sda1 rw rootwait console=ttyAMA0,115200 console=tty1 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 kgdboc=ttyAMA0,115200 elevator=noop
把 root=/dev/mmcblk0p2 之类的改为 /root=/dev/sda1.
重启即可.
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.