走进龙芯3A3000(二)安装Gentoo N64

56 篇文章 0 订阅
21 篇文章 0 订阅

Gentoo Linux是什么?

Gentoo Linux是一个万能的,基于源代码的Linux发行版——可以变成任何你需要的系统——甚至更强大。他的官网是https://www.gentoo.org/,文档位于https://wiki.gentoo.org/。Portage是他的强大的包管理器,是用python和bash写成的。

MIPS64el N64是什么?

https://www.linux-mips.org/上有两篇文章,《MIPS ABI History》、《WhatsWrongWithO32N32N64》。简单的说o32相当于MIPS32的IA-32,n32相当于MIPS64的x32,n64相当于MIPS64的AMD64。这里我选择安装n64系统。

准备

安装Gentoo需要准备三样工具:

  1. 一个可以启动的Linux内核和环境;
  2. 安装手册;
  3. stage3 tarball。

在《走进龙芯3A3000(一)安装Loongnix 》中我已经安装了一个Loongnix。Loongnix的软件都不是最新的版本,这也是我为什么要安装Gentoo的原因。不过Loongnix可以提供一个可以启动的Linux环境,正好拿来用。

安装手册位于https://wiki.gentoo.org/中文的,和英文的(当然还有其他语言的版本)。我的整个安装过程将和手册对照。过程中的注释指示这对应手册的标题。

我没有使用官方的stage3 tarball,官方对于MIPS的支持很陈旧了。我也曾尝试过自己制作一个stage1、2、3的tarball,无奈没有成功。不过我在这里:n64 stages for mipsel… any interest?找到了一个MIPS64el n64的stage3 tarball。经过测试可用。

过程

#** Choosing the media **
# Choosing the right installation medium
http://www.longlandclan.id.au/~stuartl/gentoo/mips/n64/stage3-mipsel3_n64-20170509.tar.bz2

#** Configuring the network **

#** Preparing the disks **
lvcreate -L 30G -nslash-gentoo-n64 vg
lvcreate -L 30G -nhome-gentoo-n64 vg
mkfs.ext4 /dev/vg/slash-gentoo-n64
mkfs.ext4 /dev/vg/home-gentoo-n64
mkdir /media/gentoo-n64
mount /dev/vg/slash-gentoo-n64 /media/gentoo-n64
mkdir -p /media/gentoo-n64/{home,boot}
mount /dev/vg/home-gentoo-n64 /media/gentoo-n64/home
mount /dev/sda1 /media/gentoo-n64/boot

#** Installing stage3 **
# Installing a stage tarball
date
tar xpf stage3-mipsel3_n64-20170509.tar.bz2 --xattrs-include='*.*' --numeric-owner -C /media/gentoo-n64/
vi /media/gentoo-n64/etc/portage/make.conf
MAKEOPT="-j5"
GENTOO_MIRRORS="https://mirrors.aliyun.com/gentoo/"
# Loongnix have not mirrorselect, so add GENTOO_MIRRORS manually

#** Installing base system **
# Chrooting
mkdir --parents /media/gentoo-n64/etc/portage/repos.conf
cp /media/gentoo-n64/usr/share/portage/config/repos.conf /media/gentoo-n64/etc/portage/repos.conf/gentoo.conf
cp --dereference /etc/resolv.conf /media/gentoo-n64/etc/
mount --types proc /proc /media/gentoo-n64/proc
mount --rbind /sys /media/gentoo-n64/sys
mount --make-rslave /media/gentoo-n64/sys
mount --rbind /dev /media/gentoo-n64/dev
mount --make-rslave /media/gentoo-n64/dev
chroot /media/gentoo-n64/ /bin/bash
Loongson-3A3000 / # source /etc/profile
Loongson-3A3000 / # export PS1="(chroot) $PS1"
(chroot) Loongson-3A3000 / # 

# Configuring Portage
emerge-webrsync

eselect news read

eselect profile list

# make sure profile point to n64
# --force must be between "set" word and "12"
eselect profile set --force 12
  [12]  default/linux/mips/13.0/mipsel/multilib/n64 (exp)

vi /etc/nsswitch.conf
...
passwd:      compat files
shadow:      compat files
group:       compat files
...
  
emerge -e system

# End
exit

cd
umount -l /media/gentoo-n64/dev{/shm,/pts,}
umount -R /media/gentoo-n64

#========== [插曲] make a stage3-N64 tarball =========#
mount /dev/vg/slash-gentoo-n64 /media/gentoo-n64
mount /dev/vg/home-gentoo-n64 /media/gentoo-n64/home
mount /dev/sda1 /media/gentoo-n64/boot
mount --types proc /proc /media/gentoo-n64/proc
mount --rbind /sys /media/gentoo-n64/sys
mount --make-rslave /media/gentoo-n64/sys
mount --rbind /dev /media/gentoo-n64/dev
mount --make-rslave /media/gentoo-n64/dev
chroot /media/gentoo-n64/ /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"

exit

cd
umount -l /media/gentoo-n64/dev{/shm,/pts,}
umount -R /media/gentoo-n64

#reboot
mount /dev/vg/slash-gentoo-n64 /media/gentoo-n64

#
c
cd usr/portage
rm * -rf

cd /media/gentoo-n64/
vi etc/portage/make.conf
delete all except CHOST

cd etc/portage/
rm repos.conf -rf

rm /media/gentoo-n64/etc/resolv.conf -f

# make a stage3 tarball
tar cjvpf /home/lophyxp/下载/stage3-mips64r2el-n64-20180509.tar.bz2 .

#============== End make =============#

# to be continue...
mount /dev/vg/slash-gentoo-n64 /media/gentoo-n64
mount /dev/vg/home-gentoo-n64 /media/gentoo-n64/home

vi /media/gentoo-n64/etc/portage/make.conf

USE="networkmanager bash-completion"

MAKEOPT="-j5"

LINGUAS="zh zh_CN"
L10N="zh-CH"

INPUT_DEVICES="libinput"
VIDEO_CARDS="radeon radeonsi amdgpu"

GENTOO_MIRRORS="https://mirrors.aliyun.com/gentoo/"


#** Installing base system **
# Chrooting
mkdir --parents /media/gentoo-n64/etc/portage/repos.conf
cp /media/gentoo-n64/usr/share/portage/config/repos.conf /media/gentoo-n64/etc/portage/repos.conf/gentoo.conf
cp --dereference /etc/resolv.conf /media/gentoo-n64/etc/
mount --types proc /proc /media/gentoo-n64/proc
mount --rbind /sys /media/gentoo-n64/sys
mount --make-rslave /media/gentoo-n64/sys
mount --rbind /dev /media/gentoo-n64/dev
mount --make-rslave /media/gentoo-n64/dev

chroot /media/gentoo-n64/ /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"

# Configuring Portage
emerge-webrsync

eselect news read

eselect profile list

# Updating the @world set
emerge -uDN world

#Timezone
ls /usr/share/zoneinfo
echo "Asia/Shanghai" > /etc/timezone
emerge --config sys-libs/timezone-data

# Configure locales
nano -w /etc/locale.gen
zh_CN.UTF-8 UTF-8

locale-gen
eselect locale list
eselect locale set 3
env-update && source /etc/profile && export PS1="(chroot) $PS1"

# diff -u mkspecs/features/functions.prf.orig mkspecs/features/functions.prf > /etc/portage/qmake-enable-arch-mips64el-20180609.patch
#
mkdir -p /etc/portage/patches/sys-kernel/genkernel/
cd /etc/portage/patches/sys-kernel/genkernel/
vi genkernel-default-ld-arch-mips64el-20180809.patch
--- a/arch/mips/config.sh       2018-08-09 12:04:20.835098252 +0800
+++ b/arch/mips/config.sh       2018-08-09 12:05:05.835311954 +0800
@@ -16,4 +16,5 @@

 # genkernel on mips is only used for LiveCDs && netboots.  Catalyst
 # will know where to get the kernels at.
-CMD_INSTALL=0
+CMD_INSTALL=1
+DEFAULT_UTILS_LD=gcc

vi /etc/portage/bashrc
pre_src_prepare() {
    [[ ${EAPI:-0} == [012345] ]] || return
    if ! type estack_push > /dev/null 2>&1; then
        local estack_names="eshopts_push eshopts_pop evar_push evar_push_set evar_pop estack_push estack_pop"
        source <(awk "/^# @(FUNCTION|VARIABLE): / { p = 0 } /^# @(FUNCTION|VARIABLE): (${estack_names// /|})\$/ { p = 1 } p { print }" ${PORTDIR}/eclass/estack.eclass)
    fi
    if ! type epatch_user > /dev/null 2>&1; then
        local epatch_names="EPATCH_SOURCE EPATCH_USER_SOURCE epatch_user_death_notice epatch_user epatch"
        source <(awk "/^# @(FUNCTION|VARIABLE): / { p = 0 } /^# @(FUNCTION|VARIABLE): (${epatch_names// /|})\$/ { p = 1 } p { print }" ${PORTDIR}/eclass/epatch.eclass)
    fi

    epatch_user

    for name in $epatch_names; do
        unset $name
    done
    for name in $estack_names; do
        unset $name
    done

}

#** Configuring the kernel **
# Installing the sources
# Alternative: Using genkernel
cd /etc/portage
mkdir package.use
touch package.use/default.use
mkdir package.mask
touch package.mask/default.mask

emerge -a gentoo-sources genkernel
eselect kernel list
eselect kernel set 1

nano -w /etc/fstab
/dev/sda1               /boot           ext2            noauto,noatime  1 2
/dev/vg/slash-gentoo-n64    /               ext4            noatime         0 1
/dev/vg/home-gentoo-n64     /home           ext4            noatime         0 1
/dev/vg/swap            none            swap            sw              0 0

# need --firmware Enable copying of firmware
# into initramfs to init AMD gfx card
genkernel --kernel-config=/usr/src/linux/arch/mips/configs/loongson3_defconfig --menuconfig --lvm --install --firmware all
Machine selection
	[*] RS780/SBX00 HPET Timer
General setup
	(-n64) Local version - append to kernel release

	<*> Kernel .config 
	[*]   Enable access to .config through /proc/config.gz 
	......
	[ ] Enable deprecated sysfs features to support old userspace too

genkernel --kernel-config=/usr/src/def-3a.conf --no-clean --no-mrproper --install --lvm --firmware all
	
# compiling done,但是genkernel居然不自动install
cd /var/tmp/genkernel
mount /dev/sda1 /boot
# cp *gentoo-n64* /boot

#** Configuring the system **
# Filesystem information
# nano -w /etc/fstab
# bypass!

# Networking information
nano -w /etc/conf.d/hostname
# Set to the hostname of this machine
hostname="loongson-3A3000"

nano -w /etc/conf.d/net
# Set the dns_domain_lo variable to the selected domain name
dns_domain_lo="localdomain"

# Set the nis_domain_lo variable to the selected NIS domain name
nis_domain_lo="local-nisdomain"

# Configuring the network
emerge --ask --noreplace net-misc/netifrc

nano -w /etc/conf.d/net
config_enp6s0="dhcp"

# Automatically start networking at boot
cd /etc/init.d/
ln -s net.lo net.enp6s0
rc-update add net.enp6s0 default

# The hosts file
nano -w /etc/hosts
127.0.0.1       loongson-3A3000.localdomain loongson-3A3000
::1             localhost

# System information
# Root password
passwd

# a user login informat
groupadd -g 1000 lophyxp
useradd -g lophyxp -m lophyxp
gpasswd -a lophyxp wheel
passwd lophyxp

# Init and boot configuration
nano -w /etc/rc.conf

nano -w /etc/conf.d/keymaps

nano -w /etc/conf.d/hwclock
clock="local"

#** Installing Tools**
# System logger
emerge --ask app-admin/sysklogd
rc-update add sysklogd default

mkdir -p /var/log/news
cd /var/log/news
touch news.{crit,err,notice}

# Optional: Cron daemon
emerge --ask sys-process/cronie
rc-update add cronie default
crontab /etc/crontab

# Optional: File indexing
emerge --ask sys-apps/mlocate
#updatedb

# Optional: Remote access
rc-update add sshd default

nano -w /etc/inittab
# SERIAL CONSOLES
s0:12345:respawn:/sbin/agetty 9600 ttyS0 vt100
s1:12345:respawn:/sbin/agetty 9600 ttyS1 vt100

# Filesystem tools
emerge --ask sys-fs/e2fsprogs

# lvm
emerge --ask lvm2
rc-update add lvm boot

# vim
emerge --ask vim

# Networking tools
# Installing a DHCP client
emerge --ask net-misc/dhcpcd

# cookie: HIDPI font for tty
emerge --ask media-fonts/terminus-font
vi /etc/conf.d/consolefont
consolefont="ter-132b"
rc-update add consolefont boot

#** Configuring the bootloader **
# PMON没有Intel架构上的MBR的概念,
# PMON本身就是bootloader。
# 任何存在boot.cfg文件的可识别文件系统
# (vfat,ext2)都可以启动。
# boot.cfg的语法如下:
mount /dev/sda1 /boot
vi /boot/boot.cfg
timeout 5
default 0
showmenu 1

title 'Gentoo Linux N64'
        kernel (wd0,0)/kernel-genkernel-mips-4.16.13-gentoo-n64
        initrd (wd0,0)/initramfs-genkernel-mips-4.16.13-gentoo-n64
        args   root=/dev/mapper/vg-slash--gentoo--n64 ro dolvm

# Rebooting the system
exit

cd
umount -l /media/gentoo-n64/dev{/shm,/pts,}
umount -R /media/gentoo-n64
reboot

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值