最初办法:
适用前提:参见@whysy 应广大人民群众要求,搞个N1通过U盘跑LINUX(armbian)的教程 https://www.right.com.cn/forum/thread-322991-1-1.html
感谢各位大仙的辛勤探索和付出!
一、原理:前面帖子中,Linux系统启动后,查看系统启动参数,命令为:
- cat /proc/cmdline
出来的结果为:
root=LABEL=ROOTFS rootflags=data=writeback rw console=ttyS0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 mac=${mac}
注意输出中的 root=LABEL=ROOTFS,说明只要我们把 data 分区的标签修改为 ROOTFS,应该就可以从 emmc 上启动了。
二、相关的命令(用 root 用户执行)
把系统复制到 emmc,注意,此命令会破坏原有 android 系统的 boot、data 分区
如果运行 nand-sata-install 之前注释掉 /root/install.sh 110~128行,可以避免写入 boot 和 dtb 分区
nand-sata-install
三、一些限制:
1,N1我只找到适用 3.14 内核的dtb文件,gxl_p230_2g.dtb,适用于 4.16 内核的dtb还没有找到,所以在4.16 内核下,没有 /dev/data 这个设备文件,所以无法用此方法。
2,启动信息还是需要从U盘读取,所以没法省略一个U盘。
3,如果运行升级命令,有新的uboot 文件或者是内核升级时,请在升级前把U盘插上,并把U盘的第一个分区挂载到 /boot 目录下面,否则有可能导致升级不成功甚至系统无法启动。命令:
mount /dev/sda1 /boot
四、为什么要多此一举,而且还破坏了原有的 android 系统?
因为内置的 emmc 比外置的U盘快!
追加信息:另外找了1台N1测试,在把 /root/install.sh 的110~128行注释掉,避免写入 boot 分区和 dtb 分区的情况下,两个系统可以并存。
参见https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=323194
完全安装入emmc,解决uboot读取 ext4 分区文件失败的问题
原因是ext4 分区在创建的时候,默认加入了 64bit 和 metadata_csum 的特性,而这个特性暂时不被 uboot 支持,所以有一定的机会读取失败。
解决办法就是重新用U盘启动之后,关闭这两个文件系统的特性。参考:My filesystem has too many bits
重新上传 install.sh.gz 和 _install.sh.gz,
install.sh 用于首次安装到 emmc 的时候用,
_install.sh 用于已经完成安装,只是需要设置从 emmc 启动的时候用(注意:因为要修改data 分区的属性,所以请务必从U盘启动之后再运行这个文件)。
试验了一把,现在完全不需要U盘,直接从 emmc 启动 armbian 了。
一、安装的步骤,见之前的帖子 N1把Armbian 系统rootfs写入data分区(T1应该同样适用),步骤一样,只需在安装到 emmc 之前,把U盘内的 install.sh 文件替换成附件文件,然后执行 nand-sata-install 。
注意:附件是个压缩文件,直接解压缩出来即可放在 /root 目录下面(替换原文件)
1. gunzip install.sh.gz
2. chmod a+x install.sh
二、感兴趣的同学可以看下面的原理说明:
基本原理:uboot 命令中支持读取 ext4 文件系统,所以:
1,在把root系统安装到 emmc
2,设置uboot 里面的环境变量,让系统先尝试从U盘启动,如果没有U盘的话,再尝试 emmc 的data分区上的armbian 相关文件
3,如果都没有,再尝试启动盒子上的 android 系统。
三、风险:
1,不会破坏系统上原先的android 系统,但是安装了 armbian 系统之后,没有一定的linux 基础知识,你可能回不去 android 系统。
2,基于我自己的测试,ext4load 命令偶尔会读取不了文件,所以想尝试的同学,需要一个大心脏,有一定的机率失败。 这个风险已经修正2,因为安装脚本并不会格式化 data 分区,所以如果 data分区剩余空间不足的话,会导致安装和启动失败,请自行检查emmc 空间容量。
四、系统是直接启动到 armbian 了,想回到 android 怎么办?android 和 armbian 可以自由切换
很简单,启动到 armbian 系统后,只需要把 /boot/s905_autoscript 改个名字,重新启动就会跑到 android 系统去了。如果想回到armbian 系统,只需要在 android 系统里面,把 /data/boot/下面 s905_autoscript 名字改回来就行了。
转自https://www.right.com.cn/forum/thread-327496-1-1.html
进阶办法
之前大多数的linux脚本都是把系统安装在了/dev/data分区下,由于系统过于臃肿,5G的空间除了系统,也装不了多少东西。出于这个原因,我把rootfs 写到了/dev/system下。
期望目标是 :
1,分区对应如下:
/dev/system /
/dev/data /data
/dev/cache /home
2.尽可能精简rootfs分区大小,内存占用,尽量控制在800M/150M 以内,把资源留给应用。
现在提供给大家的这个版本是刚刚装好以后部署到/system的一个状态,现在的系统占用大概为680M左右。
固件使用说明:(链接:https://pan.baidu.com/s/1S14fdX8KLeMQmHIkbY98EQ 密码:jon9)
把gz文件和reconvery.sh 放在n1 的linux U盘的同一个目录里,用U盘启动。
1. 先执行chmod +x ./reconvery.sh 加上执行权限
2. sudo ./reconvery.sh 执行脚本,写入到emmc.
3.用户名: root/1234, pi/pi
预装了一个memcached 的服务用来加速磁盘读写性能的。
4.无线网络目前还没有驱动起来。等后面慢慢加。
4. swap暂时没有使用,大家可以自己添加。。
5. /etc/fstab的挂载表如下:
/dev/system /
/dev/data /data
/dev/cache /home/
说明:由于未知原因,请不要使用uuid 代替设备名用于 fstab挂载
恢复脚本:
#!/bin/sh
echo "开始恢复到/dev/system分区."
mkdir /tmp/system
chmod 777 /tmp/system
IMAGE_KERNEL="/boot/zImage"
IMAGE_INITRD="/boot/initrd.img-$VER"
PART_ROOT="/dev/system"
DIR_INSTALL="/tmp/system/"
IMAGE_DTB="/boot/dtb.img"
echo "挂载/dev/system分区"
if grep -q /dev/system /proc/mounts ; then
echo "SYSTEM内容将被清空."
umount -f /dev/system
fi
mkdir -p /tmp/system
echo "正在重建SYSTEM文件系统..."
mke2fs -F -q -t ext4 -m 0 /dev/system || exit 1
e2fsck -n /dev/system || exit 1
resize2fs -s /dev/system || exit 1
tune2fs -O ^metadata_csum /dev/system || exit 1
echo "格式化完成."
echo "重新挂载/dev/system分区"
mount -o rw $PART_ROOT $DIR_INSTALL
echo "开始解压到SYSTEM..."
tar -zxvf ./diet_baseline_rootfs.tar.gz -C $DIR_INSTALL
mv $DIR_INSTALL/backup_root/* $DIR_INSTALL/
rmdir $DIR_INSTALL/backup_root
echo "完成."
echo "同步磁盘 ...."
sync;sync;sync;
umount /tmp/system
echo "*******************************************"
echo "系统已经写入到system中,请关闭系统后拔除引导U盘,再次上电"
echo "*******************************************"
脚本测试:
在ubuntu16.04下,有2个问题:
1.resize2fs -s /dev/system 不支持 -s 参数,
解决办法:
需要修改脚本,手工去除这个参数后再次运行脚本
2.tune2fs -O ^metadata_csum /dev/system 这个命令不支持。
解决办法:
等从emmc启动后,再次运行tune2fs -O ^metadata_csum /dev/system
在debian 9.5的系统下,没有这个问题。
转自 https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=332259&page=1
终极完美办法
综合以上人的帖子,请教7ji,最后得到的办法
- Burn Armbian_5.44_S9xxx_xxxxx_xxxxx_3.14.29_xxxxx_20180729.img to a usb device, set the boot files
(本身文件适配的s905w 2G的设备,因此启动项要修改) - Boot Armbian_5.44 from the usb device, if the partition table is not set, the cmd to set the amlogic partition table is like this:
启动
wget https://gitee.com/xiayang0521/amlogic-s9xxx-centos/releases/download/install-Armbian-kernel3.14-to-emmc/ampart-v1.3-aarch64-static.gz
gunzip ampart-v1.3-aarch64-static.gz
mv ampart-v1.3-aarch64-static ampart
chmod a+x ampart
./ampart /dev/mmcblk0 -m dclone boot::256M:1 data::-1:4
reboot
分区结果
===================================================================================
ID| name | offset|( human)| size|( human)| masks
-----------------------------------------------------------------------------------
0: bootloader 0 ( 0.00B) 400000 ( 4.00M) 0
(GAP) 2000000 ( 32.00M)
1: reserved 2400000 ( 36.00M) 4000000 ( 64.00M) 0
(GAP) 800000 ( 8.00M)
2: cache 6c00000 ( 108.00M) 0 ( 0.00B) 0
(GAP) 800000 ( 8.00M)
3: env 7400000 ( 116.00M) 800000 ( 8.00M) 0
(GAP) 800000 ( 8.00M)
4: boot 8400000 ( 132.00M) 10000000 ( 256.00M) 1
(GAP) 800000 ( 8.00M)
5: data 18c00000 ( 396.00M) on condition ( end) 4
===================================================================================
- Input the CMD lines to install to emmc:
cd /root
wget https://gitee.com/xiayang0521/amlogic-s9xxx-centos/releases/download/install-Armbian-kernel3.14-to-emmc/files_install_emmc.zip
unzip files_install_emmc.zip
cd files_install_emmc/
此时需要修改files_install_emmc里面两个boot文件夹里的dtb和uEnv 适配你的设备,然后才能
bash install.sh #(use install-centos.sh, if you have a centos-root-file-system.tar.gz )
bash boot_from_emmc.sh
reboot # !!!别移除优盘,直至系统从内置启动,此次启动以后再也无需优盘启动。
https://gitee.com/xiayang0521/amlogic-s9xxx-centos/releases/tag/install-Armbian-kernel3.14-to-emmc