|
本帖最后由 yangxuan8282 于 2018-10-1 15:39 编辑
因为 Discuz 的排版比较难用,调整格式太麻烦,想看代码部分高亮的可以移步 github : https://github.com/yangxuan8282/ ... -%E9%95%9C%E5%83%8F
N1 在某种程度上可以当作单板机用,价格比类似配置的 odroid c2 或是 nanopi k2 低很多,而且也从 4.14 就进入 mainline 了,所以支持程度有一定保证
缺点是没有 GPIO ,扩展方面就差一些,然后内核方面说实话支持一般,有些驱动还是有问题,比树莓派这种社区活跃的板子还是有差距的
从外观上看接口很简单,两个 USB 2.0,一个 HDMI ,网口和电源
网上也早有拆机图,除了无线这块别的都比较明显,至于无线芯片通过观察 dmesg 和用的驱动文件判断基本是和树莓派 3B+ 同款的 CYW43455
作为一个 armv8 设备,和其它 arm 设备的系统移植大同小异,无非是内核加上 rootfs,最后是 u-boot
内核可以直接用 150balbes 的,rootfs 根据发行版的不同,获取方法也不太一样
下面说说具体步骤
给出的命令只是参考,基本是从我之前写的脚本里摘的,直接运行可能不行,建议按照原脚本里那样写 function 来运行
原脚本链接: https://github.com/yangxuan8282/ ... er/gen-centos_n1.sh
先建一个 2G 的镜像,分两个区,一个 `/boot` 作为启动分区,另一个是根分区:
```
fallocate -l $(( 2048 * 1024 *1024 )) "$OUTPUT_IMG"
cat > fdisk.cmd <<-EOF
o
n
p
1
+128MB
t
c
n
p
2
w
EOF
fdisk "$OUTPUT_IMG" < fdisk.cmd
rm -f fdisk.cmd
```
格式化并挂载,这里是挂载在当前目录的 mnt :
```
mkfs.fat -F32 "$BOOT_DEV"
mkfs.ext4 "$ROOT_DEV"
mkdir -p mnt
mount "$ROOT_DEV" mnt
mkdir -p mnt/boot
mount "$BOOT_DEV" mnt/boot
```
然后分别下载内核和 rootfs 并复制进镜像
先是 rootfs ,这个既可以直接从现成镜像里提取,也可以用工具自己生成,比如 debian 下有 debootstrap
为了方便,就直接拿现成的了:
```
local url="https://github.com/yangxuan8282/gen-rpi_os/releases/download/centos_roots/CentOS-7-aarch64-rootfs-7.5.1804.tar.xz"
mkdir -p mnt
wget $url -O- | tar -C mnt -xJf -
```
最后会报错,不过完全可以忽略,只是因为镜像的第一个分区是 fat32 无法保留权限造成的
内核这里是从 150balbes 制作的镜像中提取出来的 ( 只保留 `/boot`, `/lib/firmware`, `/lib/modules` )
放到 github 了: https://github.com/yangxuan8282/ ... ag/150balbes_kernel
```
local url="https://github.com/yangxuan8282/phicomm-n1/releases/download/150balbes_kernel/kernel_4.18.7_20180922.tar.gz"
wget $url
tar xf *.tar.gz
cp -R --no-preserve=mode,ownership kernel_*/boot/* mnt/boot/
cp -a kernel_*/lib/* mnt/lib/
rm -rf kernel_*
```
然后为了让系统知道 rootfs 在哪个分区,得分别修改 uEnv.ini 和 /etc/fstab ,这里有几种方式,比如设备名, UUID, LABEL
```
sed -i "s|root=LABEL=ROOTFS|root=UUID=${ROOT_UUID}|" mnt/boot/uEnv.ini
```
```
echo "UUID=${BOOT_UUID} /boot vfat defaults 0 2
UUID=${ROOT_UUID} / ext4 defaults,noatime 0 1" > mnt/etc/fstab
```
最后给镜像写入 u-boot 就能启动了
```
local url="https://github.com/yangxuan8282/phicomm-n1/releases/download/20180917/u-boot.bin"
wget $url
dd if=u-boot.bin of=${LOOP_DEV} bs=1 count=442 conv=fsync
dd if=u-boot.bin of=${LOOP_DEV} bs=512 skip=1 seek=1 conv=fsync
rm -f u-boot.bin
```
目前为止给 N1 移植过 deepin, alpine, centos 几个系统,基本大同小异
需要看 /boot 分区的那几个启动相关文件怎么生成的可以看 alpine 的脚本,那个也没用现成的 150balbes 内核,是自己改了一部分 config,然后以 alpine 的包管理打包的
alpine 的脚本也包括了自己从头制作完整的 rootfs 过程
alpine 脚本地址: https://github.com/yangxuan8282/ ... er/gen-alpine_n1.sh
最后附上一张 alpine 的桌面截图,仿的 parrotsec 的效果,注意 github 上放的 alpine 是没安桌面的:
在 alpine 上用 chromium 看油管 720p 也基本流畅,不过没硬解,资源占用高
deepin 一开始显示有问题,后来弄好后也没截新的,基本和 x86 版一致,只不过可能因为驱动问题比较卡顿
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|