仔细看了下 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.

重启即可.


Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.