找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 2842|回复: 4

[N1盒子] 安装第三方uboot,提取内核,安装自己喜欢的linux发行版还有lxc的op

[复制链接]
本帖最后由 olvolv 于 2021-9-9 14:31 编辑

其实网上制作系统U盘的教程很多,我这里给个拿来主义的方法吧,适合经常折腾的朋友。
先按照常规给U盘分区。
下边的操作都是在linux系统里并且在root用户下,先准备好环境,把U盘插入到linux主机上
在某个目录比如work新建个root目录,执行如下命令挂载U盘(把sdb换成你的U盘设备)
mount /dev/sdb2 uRoot          #uRoot 可以随便,
mkdir uRoot/boot                  #必须是boot
mount /dev/sdb1 boot

制作一个可以运行的系统可以分三部分,uboot,内核,系统(说法不是很专业,理解就行了)n1自带的uboot在机子里边咱不动,我们在u盘里再安装个uboot,这个晚会儿再说。

首先安装系统(不专业说法莫喷),其实这个就是发行系统的rootfs,获取方法可以从官方
或镜像网站获取,这里给个例子便于理解下载centos 镜像文件 在work目录下执行
wget https://repo.huaweicloud.com/cen ... /images/install.img
下好后
mkdir centos rootfs   #新建两个目录
mount install.img centos   
mount centos/LiveOS/rootfs.img rootfs    #这个img才是正主,我也是服了
rsync -a rootfs uRoot                       #同步镜像中的所有文件到U盘
sync                                               #打个保险

好了rootfs装好了,该内核了,还是拿来主义,比如[N1盒子] 【2021.03.07】Armbian 20.11 自编译 ubuntu 20.04 (已开源)(这个内核最后还是要说下的)
下载好这个镜像(比如文件为armbian.tar.gz),准备好目录并挂载
gzip -d armbian.tar.gz
mkdir armbian
losetup -Pf --show armbian.tar.gz          #命令执行后会打印一个loop设备,比如/dev/loop0
mount /dev/loop0p2     armbian                  #挂载分区2,其实对应着U盘的分区2(ext4)
mount /dev/loop0p1     armbian/boot        #分区1,对应u盘的分区1(fat32,boot)
我们只要它的内核所以执行如下
cd armbian                                         #进入镜像里的根目录
tar zcf  ../kernel.tar.gz  usr/lib/modules/     boot/zImage boot/uInitrd       \              
      boot/dtb/amlogic/meson-gxl-s905d-phicomm-n1*                          # 和上边是一条命令。这是两个dtb文件,谁知道啥区别?

cd ..                                                         #回到work目录
内核包括模块打包好了,这样以后不用再提取了

开始解压到u盘
cd uRoot                            #一定要先挂载好u盘,包括boot分区!!!(我就是忘挂boot一度以为方法失败)
tar  xzf   ../kernel.tar.gz       #解压

好了内核也复制里边了,就差uboot了,
按照https://github.com/cattyhouse/new-uboot-for-N1
安装好uboot(就是下载,复制),然后按说明改一下
extlinux/extlinux.conf其中的UUID
好了u盘制作完成,除了uboot不用再换,内核和系统都可以替换为其它的去试试(我就试过armbian,arrchlinux,centos8)


更新补充一下,根据https://blog.csdn.net/feixiang3839/article/details/80857138所说:
如果仅复制这些文件到根系统,通过uboot加载启动,你会发现系统根本无法启动,这是因为此rootfs默认启动方式为anaconda启动,uboot引导进入anaconda模式后会直接卡死。复制目录下的所有文件到根系统目录,删除

/etc/systemd/system/default.target

建立软连接

ln -s /usr/lib/systemd/system/multi-user.target etc/systemd/system/default.target

引导系统启动后进入multi-user模式。
————————————————
版权声明:本文为CSDN博主「_阿桂_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/feixiang3839/article/details/80857138
没验证是否可以启动的时候我就更改过了,制作centos系统的话大家注意改一下。




哦,对了这个uboot是被原机加载的中间显示器会不显示,反正无脑等一二分钟如果还是不显示八成是不能启动。
还有这个centos8的镜像需要自己


好了有个大坑请哪位大侠指点下:
就是除了我举例这个内核,其它比较新的内核reboot直接关机无法重启,本来这个内核也没其它毛病
但是内核日志老是报WARNING: CPU: 3 PID: 16115 at kernel/time/hrtimer.c:932 hrtimer_forward+0x88/0xc0
虽然没看见啥副作用,但是逼死强迫症啊,其它内核倒是不报,就是没法重启必须插拔电源更逼死人




其实n1的文章很多了,我有点炒冷饭的感觉哈,所以再给个运行lxc容器的方法吧,在lxc容器里安装
openwrt感觉比docker更适合,armbian安装lxc只要apt install lxc  lxc-templates 就可以了
centos archlinux自己搜下就有了。
为了容器和主机一个网段,n1主机的网络要配置成网桥,玩过
pve的朋友一定对vmbr0不陌生,n1也要配置成类似的,armbian这样配置(按需修改)


cat /etc/network/interfaces
iface eth0 inet manual

auto br0

iface br0 inet static

        address 192.168.1.88

        netmask 255.255.255.0

        gateway 192.168.1.1

        dns-nameservers 192.168.1.1

        bridge-ports eth0

        bridge-stp off

        bridge-fd 0

auto lo

iface lo inet loopback

其它系统搜索就有了。
aarch64我是没找到现成模板的,所以只能自己做,容器的配置目录是在/var/lib/lxc
在这个目录下新建个目录比如openwrt,openwrt目录里边在建个config的配置文件和rootfs目录
我们找到个aarch64架构的Openwrt镜像包解压出rootfs放到上边的rootfs里边
这样容器openwrt就好了,简单吧,启动只要
lxc-start -n openwrt              #容器名就是/var/lib/lxc/中的子目录名字
只有这样当然不行,因为配置文件需要正确的内容,

附件是我配置好的框架,
我们在n1主机里解压:tar zxf lxc.tar.gz -C /     #压缩包是从根目录打包的
然后只要把openwrt镜像中rootfs解压到/var/lib/lxc/openwrt/rootfs中,
容器就可以使用了。
因为有的系统直接lxc-start,有问题,所以我修改了systemd中lxc@.service这个模板
并且增加了个功能,配合/var/lib/lxc/lxc-start-montior.sh这个脚本,还有
容器下边自己的脚本(/var/lib/lxc/openwrt/post-start-host.sh)可以等容器启动后加载
主机的设备到容器里比如脚本中lxc-device -n openwrt add /dev/net/tun是openv*n必须的,
拨号的话就在这句下边添加lxc-device -n openwrt add /dev/ppp(这样的方法比在配置文件里添加方便直观多了)
管理容器的命令如下:
systemctl start lxc@openwrt.service           #启动openwrt容器,红色字就是容器名
systemctl stop lxc@openwrt.service           #停止openwrt容器,红色字就是容器名
systemctl enable lxc@openwrt.service          #开机自启openwrt容器,红色字就是容器名
对了还有在n1 主机里
echo 'ip6_tables' > /etc/modules-load.d/openwrt_firewall.conf     #不加载这个模块容器里ip6tables无法运行
有可能op容器启动后它的firewall不正常,需要在开机启动里添加
/etc/init.d/firewall reload

这个固件没有n1的我是提取r2s里边的,除了
网络共享中因为ksmbd模块和内核不匹配没法用,其它没发现啥问题(没有无线)
提取rootfs可以参考上边提取内核时的方法,我另一个帖子有其它的方法
当然可以安装其它容器,配置文件摸索吧
pve中的lxc被包装了一层,底层目录和配置文件都一样
pve(x64)也可以装aarch64架构的容器,搜索binfmt ,qemu-user ,qemu-aarch64-static
太累了不写了
















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 1恩山币 +1 收起 理由
wan*** + 1 太好了,让N1有更多固件选择

查看全部评分

思考了!!
牛B
回复

使用道具 举报

厉害,思考了
回复

使用道具 举报

好文好软
回复

使用道具 举报

帮大忙了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-5-18 01:11

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表