国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Hi3798MV200 恩兔N2 NS-1 (三): 制作 Ubuntu rootfs

這篇具有很好參考價值的文章主要介紹了Hi3798MV200 恩兔N2 NS-1 (三): 制作 Ubuntu rootfs。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

  • Hi3798MV200 恩兔N2 NS-1 (一): 設(shè)備介紹和刷機說明
  • Hi3798MV200 恩兔N2 NS-1 (二): HiNAS海納思使用和修改
  • Hi3798MV200 恩兔N2 NS-1 (三): 制作 Ubuntu rootfs
  • Hi3798MV200 恩兔N2 NS-1 (四): 制作 Debian rootfs

關(guān)于根文件系統(tǒng) rootfs

在 Linux 中, 所有的文件和目錄被組織成一個樹狀的結(jié)構(gòu), 而根文件系統(tǒng), rootfs, the root filesystem, 位于文件樹的頂層(路徑'/'). Linux 內(nèi)核通過 root = 設(shè)置的參數(shù)掛載 rootfs. 在根文件系統(tǒng)中也包含了其它文件樹的掛載點(mount points), 用于將其它文件(設(shè)備)掛載到當前環(huán)境中, 形成完整的系統(tǒng).

在根文件系統(tǒng)中包含了用于系統(tǒng)啟動和操作的關(guān)鍵文件. 系統(tǒng)引導啟動程序會在根文件系統(tǒng)掛載之后執(zhí)行初始化腳本(如rcS, init.d, profile).

如果把整個Linux操作系統(tǒng)看作層級關(guān)系, 根文件系統(tǒng)是位于內(nèi)核之上的模塊,對于同樣的硬件和架構(gòu), Linux各個發(fā)行版的區(qū)別主要在于根文件系統(tǒng), 而底層的內(nèi)核部分幾乎是一樣的. 通過制作根文件系統(tǒng), 可以更換成其它發(fā)行版, 定制自己的最小化安裝.

文件準備

底包

本例使用的是稍息版 Debian 10, 替換成 Ubuntu20.04.

從 stretch.tar.bz2 中提取驅(qū)動部分, 位于 /lib/modules/4.4.35-hi3798mv2x/

下載 ubuntu-base

從國內(nèi)鏡像站點, 下載 ubuntu-base 包

  • https://mirrors.ustc.edu.cn/ubuntu-cdimage/ubuntu-base/releases/
  • https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cdimage/ubuntu-base/releases/

解壓

在本地創(chuàng)建工作目錄, 將壓縮包解壓到工作目錄下, 注意要用 sudo + -p(-p, --preserve-permissions)參數(shù), 保留原owner和原權(quán)限

mkdir workroot
sudo tar -xpf ubuntu-base-20.04.5-base-arm64.tar.gz -C workroot/

初始的目錄大小為77MB左右. 可以檢查一下 workroot 下的文件目錄, owner是否為 root.

關(guān)于為什么要用 sudo

Even if you use tar's --same-owner flag, you will still need to extract the files as root to preserve ownership.
--same-owner flag is on by default for root.
--no-same-owner, extract files as yourself, which is default for ordinary users

準備 resolv.conf

base系統(tǒng)中 resolv.conf 為空, 需要設(shè)置 nameserver 否則 chroot 后目標系統(tǒng) apt install 時無法解析域名

選項一, 復制

復制 resolv.conf 到目標系統(tǒng)

sudo cp /etc/resolv.conf workroot/etc/resolv.conf

選項二, 直接寫

echo "nameserver 127.0.0.53" | sudo tee workroot/etc/resolv.conf

復制 qemu-xxx-static

安裝 qemu-user-static, 這個包里面有各個架構(gòu)的二進制執(zhí)行文件, 會安裝到 /usr/bin

sudo apt install qemu-user-static

對于 armhf, 復制 qemu-arm-static; 對于 arm64 復制 qemu-aarch64-static

# armhf
sudo cp /usr/bin/qemu-arm-static workroot/usr/bin/
# arm64
sudo cp /usr/bin/qemu-aarch64-static workroot/usr/bin/

在進行下一步之前檢查文件格式是否正確, 32位的 armhf 用 qemu-arm-static, 64位的 arm64 用 qemu-aarch64-static

# armhf
sudo chroot workroot/ /usr/bin/qemu-arm-static /bin/ls
# arm64
sudo chroot workroot/ /usr/bin/qemu-aarch64-static /bin/ls

如果文件架構(gòu)不匹配, 會提示- /bin/ls: Invalid ELF image for this architecture

修改目標系統(tǒng)軟件源

vi workroot/etc/apt/sources.list

替換為USTC源

: %s/http:\/\/ports.ubuntu.com\/ubuntu-ports\//http:\/\/mirrors.ustc.edu.cn\/ubuntu-ports\//gc

掛載目標系統(tǒng)

選項一: 手工掛載

掛載目錄

sudo mount -t proc /proc    workroot/proc
sudo mount -t sysfs /sys    workroot/sys
sudo mount -o bind /dev     workroot/dev
sudo mount -o bind /dev/pts workroot/dev/pts

切換根目錄

sudo chroot workroot/

如果前面的檢查沒問題, 但是這一步總是提示 '/bin/bash': Exec format error, 檢查一下 binfmts 是否開啟

update-binfmts --display

正常應該顯示如下, 對應格式為 enabled,

qemu-aarch64 (enabled):
     package = qemu-user-static
...
qemu-arm (enabled):
     package = qemu-user-static
...

如果顯示為 disabled, 需要檢查是否有軟件未安裝. 安裝了 Docker 的 Ubuntu 環(huán)境可能會有沖突.

$ mount | grep binfmt
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=29,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=18150)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,nosuid,nodev,noexec,relatime)

選項二: 使用腳本掛載

以上的操作, 可以通過一個腳本進行簡化

#!/bin/bash
mnt() {
    echo "MOUNTING"
    sudo mount -t proc /proc    ${2}proc
    sudo mount -t sysfs /sys    ${2}sys
    sudo mount -o bind /dev     ${2}dev
    sudo mount -o bind /dev/pts ${2}dev/pts
    sudo chroot ${2}
}
umnt() {
    echo "UNMOUNTING"
    sudo umount ${2}proc
    sudo umount ${2}sys
    sudo umount ${2}dev/pts
    sudo umount ${2}dev
}

if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
    mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
    umnt $1 $2
else
    echo ""
    echo "Either 1'st, 2'nd or both parameters were missing"
    echo ""
    echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
    echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
    echo ""
    echo "For example: ch-mount -m /media/sdcard/"
    echo ""
    echo 1st parameter : ${1}
    echo 2nd parameter : ${2}
fi

需要使用目標系統(tǒng)環(huán)境時

./mount.sh -m workroot/

定制 rootfs 內(nèi)容

root@Box:/# uname -a
Linux Box 5.15.0-52-generic #58~20.04.1-Ubuntu SMP Thu Oct 13 13:09:46 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
# 檢查 mount
root@Box:/# mount
/proc on /proc type proc (rw,relatime)
/sys on /sys type sysfs (rw,relatime)
udev on /dev type devtmpfs (rw,nosuid,noexec,relatime,size=6965676k,nr_inodes=1741419,mode=755,inode64)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)

添加驅(qū)動文件

僅使用kernel自帶的驅(qū)動可以啟動rootfs, 但是一些板載的外設(shè), 例如SATA硬盤和USB, 會因為沒有驅(qū)動而無法識別. 需要手動將這些驅(qū)動放到rootfs中.

通過uname -r可以看到目標系統(tǒng)的架構(gòu)為4.4.35-hi3798mv2x, 由此可以確定驅(qū)動的路徑為

/lib/modules/4.4.35-hi3798mv2x/

從前面準備的底包中, 將驅(qū)動部分文件提取后放到這個目錄下, 結(jié)構(gòu)類似于

modules
└── 4.4.35-hi3798mv2x
    ├── kernel
    │?? ├── crypto
    │?? ├── drivers
    │?? ├── fs
    │?? ├── lib
    │?? └── net
    ├── modules.alias
    ├── modules.alias.bin
    ├── modules.builtin
    ├── modules.builtin.alias.bin
    ├── modules.builtin.bin
    ├── modules.dep
    ├── modules.dep.bin
    ├── modules.devname
    ├── modules.order
    ├── modules.softdep
    ├── modules.symbols
    └── modules.symbols.bin

安裝基礎(chǔ)軟件

# 77M -> 300M
apt update
# 300M -> 304M
apt install nano sudo vim-tiny

修改軟件源vi /etc/apt/sources.list, 替換為USTC源

: %s/http:\/\/ports.ubuntu.com\/ubuntu-ports\//http:\/\/mirrors.ustc.edu.cn\/ubuntu-ports\//gc

再安裝其它軟件就快多了

apt upgrade
# 304M -> 440M
apt install openssh-server
# 440M -> 445M
apt install u-boot-tools net-tools sysstat smartmontools network-manager

安裝的軟件包中

  • openssh-server 提供 ssh 服務(wù)
  • u-boot-tools 提供 fw_printenv 和 fw_setenv 方法, 用于修改 UBOOT 啟動參數(shù)
  • net-tools 提供 ifconfig, netstat 等常用工具
  • sysstat 提供 iostat 等常用工具

基礎(chǔ)設(shè)置

設(shè)置網(wǎng)絡(luò)

mkdir /etc/network/interfaces.d
echo auto eth0 > etc/network/interfaces.d/eth0
echo iface eth0 inet dhcp >> etc/network/interfaces.d/eth0

給 root 用戶設(shè)置密碼 注意 這一步別忘了

passwd

開啟 root 用戶 ssh 訪問, 編輯 /etc/ssh/sshd_config, 找到

#PermitRootLogin prohibit-password

替換為

PermitRootLogin yes

配置登錄的串口, 修改文件 /etc/systemd/system/getty.target.wants/getty@tty1.service

vi /etc/systemd/system/getty.target.wants/getty\@tty1.service

ConditionPathExists=/dev/tty0

修改為實際的名稱

ConditionPathExists=/dev/ttyAMA0

清理文件

安裝完成后, 清理apt

apt autoremove
apt-get autoclean
apt-get clean
apt clean
# 結(jié)束后 368M

取消掛載目標系統(tǒng)

在目標系統(tǒng)上, exit 退出

結(jié)束后, 要先取消掛載

選項一: 手工取消掛載

sudo umount workroot/proc
sudo umount workroot/sys
sudo umount workroot/dev/pts
sudo umount workroot/dev

選項二: 通過腳本取消掛載

如果通過腳本, 則是

./mount.sh -u workroot/

制作 rootfs 鏡像文件

# 生成一個適當大小的空鏡像,這個大小參考du -h workroot
dd if=/dev/zero of=rootfs.img bs=1M count=1024
# 格式化 
mkfs.ext4 rootfs.img
# or
mkfs -t ext4 rootfs.img
# 掛載空鏡像
mkdir rootfs
sudo mount rootfs.img rootfs/
# 寫入文件, 保留權(quán)限
sudo cp -rfp workroot/* rootfs/
# 取消掛載
sudo umount rootfs/
# 檢查文件系統(tǒng)并自動修復
e2fsck -p -f rootfs.img
# 使鏡像緊湊
resize2fs -M rootfs.img

問題和解決

Root 能串口登錄, 無法 ssh 登錄

這是因為 ssh 默認禁止 root 登錄, 編輯 /etc/ssh/sshd_config, 找到

#PermitRootLogin prohibit-password

替換為

PermitRootLogin yes

然后systemctl restart sshd重啟 sshd 服務(wù)

分區(qū)可用空間為0

這是因為鏡像壓縮后寫入, 分區(qū)大小就是鏡像大小, 需要通過 resize2fs /dev/[partition] 擴充分區(qū)

方案一: 使用腳本, 手工執(zhí)行

創(chuàng)建 /usr/bin/local_resize.sh, 內(nèi)容如下, chmod +x 設(shè)為可執(zhí)行

#!/bin/bash
rootfs_partition=/dev/$(lsblk -l|grep /|awk '{print $1}')
logger -t "resize-disk[$$]" "resizing $rootfs_partition"
if [ "$(echo $rootfs_partition | grep "mmc")" = "" ];then
    rootfs_disk=$(echo "$rootfs_partition" |sed -E -e 's/^(.*)[0-9]+/\1/g')
else
    rootfs_disk=$(echo "$rootfs_partition" |sed -E -e 's/^(.*)p[0-9]+/\1/g')
fi

if [ "$rootfs_disk" = "/dev/mmcblk0" ]; then
    resize2fs $rootfs_partition 2>&1 > /dev/null
else
    rootfs_partition_num=$(echo "$rootfs_partition" |sed -E -e 's/^.*([0-9]+)/\1/g')
    startfrom=$(fdisk -l ${rootfs_disk} -o device,start|grep ${rootfs_partition}|awk '{print $2}')
    (echo d; echo $rootfs_partition_num; echo n; echo p; echo $rootfs_partition_num; echo $startfrom; echo ; echo p; echo w;) | fdisk $rootfs_disk
    sync
    resize2fs $rootfs_partition
fi
logger -t "resize-disk[$$]" "resized $rootfs_partition"

方案二: 使用 systemd service 在第一次啟動時執(zhí)行

增加 /usr/sbin/local-resize2fs.sh , chmod +x 設(shè)為可執(zhí)行

#!/bin/bash
if [ ! -f /etc/first_init ]; then
    rootfs_partition=/dev/$(lsblk -l|grep /|awk '{print $1}')
    logger -t "resize-disk[$$]" "resizing $rootfs_partition"
    if [ "$(echo $rootfs_partition | grep "mmc")" = "" ];then
        rootfs_disk=$(echo "$rootfs_partition" |sed -E -e 's/^(.*)[0-9]+/\1/g')
    else
        rootfs_disk=$(echo "$rootfs_partition" |sed -E -e 's/^(.*)p[0-9]+/\1/g')
    fi

    if [ "$rootfs_disk" = "/dev/mmcblk0" ]; then
        resize2fs $rootfs_partition 2>&1 > /dev/null
    else
        rootfs_partition_num=$(echo "$rootfs_partition" |sed -E -e 's/^.*([0-9]+)/\1/g')
        startfrom=$(fdisk -l ${rootfs_disk} -o device,start|grep ${rootfs_partition}|awk '{print $2}')
        #lastsector=$(fdisk -l ${rootfs_disk} -o device,end|grep ${rootfs_partition}|awk '{print $2}')
        (echo d; echo $rootfs_partition_num; echo n; echo p; echo $rootfs_partition_num; echo $startfrom; echo ; echo p; echo w;) | fdisk $rootfs_disk
        sync
        resize2fs $rootfs_partition
    fi
    echo `date +%s%N` > /etc/first_init
    logger -t "resize-disk[$$]" "resized $rootfs_partition"
fi
exit 0

增加service: /etc/systemd/system/resize2fs.service

[Unit]
Description=resize2fs local filesystem
Before=local-fs-pre.target
DefaultDependencies=no

[Service]
Type=oneshot
TimeoutSec=infinity
ExecStart=/usr/sbin/local-resize2fs.sh
RemainAfterExit=true

[Install]
RequiredBy=local-fs-pre.target

在 /etc/systemd/system/local-fs-pre.target.wants/ 下面增加 resize2fs.service 的軟鏈, 使其生效文章來源地址http://www.zghlxwxcb.cn/news/detail-630445.html

參考

  • https://wiki.t-firefly.com/en/ROC-RK3399-PC/linux_build_ubuntu_rootfs.html

到了這里,關(guān)于Hi3798MV200 恩兔N2 NS-1 (三): 制作 Ubuntu rootfs的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • EC6110-Hi3798MV310-當貝純凈桌面-卡刷強刷固件包

    EC6110-Hi3798MV310-當貝純凈桌面-卡刷強刷固件包

    EC6110-Hi3798MV310-當貝純凈桌面-卡刷強刷固件包-內(nèi)有教程及短接點 特點: 1、適用于對應型號的電視盒子刷機; 2、開放原廠固件屏蔽的市場安裝和u盤安裝apk; 3、修改dns,三網(wǎng)通用; 4、大量精簡內(nèi)置的沒用的軟件,運行速度提升,多出大量的存儲空間; 5、去除應用安裝限制

    2024年02月03日
    瀏覽(21)
  • 華為盒子EC6110-M、EC6110-T(3798mv310芯片)強刷固件及教程

    華為盒子EC6110-M、EC6110-T(3798mv310芯片)強刷固件及教程

    固件特點: 1.采用官方系統(tǒng)核心以及官方內(nèi)核; 2.全局精簡,保留基本功能,速度更快,無廣告,無推送; 3.微調(diào)運行機制,使系統(tǒng)更流暢; 4.默認開啟硬件GPU加速; 5.固件默認開啟ROOT。默認開啟ADB; 6.添加精簡版當貝桌面,桌面和軟件可以自由選擇卸載; 7.本固件刷機為三

    2024年02月11日
    瀏覽(24)
  • RISC-V Linux系統(tǒng)rootfs制作

    buildroot 是一個構(gòu)建嵌入式Linux系統(tǒng)的框架。整個 buildroot 是由Makefile(*.mk) 腳本和 Kconfig(Config.in) 配置文件構(gòu)成的,因此可以像配置 Linux 內(nèi)核一樣執(zhí)行 make menuconfig 進行配置,編譯出一個完整的、可以直接燒寫到機器上運行的 Linux 系統(tǒng)文件(包含 bootloader、kernel、rootfs 以及 rootf

    2024年02月11日
    瀏覽(18)
  • NS2安裝及入門實例——(ns2.35 / Ubuntu20.04)

    NS2安裝及入門實例——(ns2.35 / Ubuntu20.04)

    官網(wǎng)下載地址:http://www.isi.edu/nsnam/ns/ 點擊 allinone 點擊 current release 2.35 安裝 ns-allinone-2.35.tar.gz ① 問題1 解決: ② 問題2 解決: ③ 問題3 解決:全部加上 (char) 加入一下配置: 輸入 ns,進入成功: 解決:

    2024年02月10日
    瀏覽(18)
  • ubuntu22.04下rv1109 rootfs編譯問題處理

    出于對Ubuntu新版本系統(tǒng)的體驗,將系統(tǒng)更新到了ubuntu22.04了。然后在編譯rv1109 sdk時出現(xiàn)了一些異常的錯誤。但是已經(jīng)不回去了,只能硬著頭皮一路走下去了。并將錯誤記錄以下,以便下次有類似錯誤,做個參考。 buildroot 報錯:c-stack.c:55:26:error:missing binary operator before token “

    2024年02月11日
    瀏覽(20)
  • 【TES714】JFM7K325T(復旦微FPGA)+HI3531DV200(華為海思)的綜合視頻處理平臺設(shè)計原理圖及調(diào)試經(jīng)驗

    【TES714】JFM7K325T(復旦微FPGA)+HI3531DV200(華為海思)的綜合視頻處理平臺設(shè)計原理圖及調(diào)試經(jīng)驗

    板卡概述 TES714 是自主研制的一款 5路HD-SDI 視頻采集圖像處理平臺,該平臺采用上海復旦微的高性能Kintex系列FPGA加上華為海思的高性能視頻處理器 HI3531DV200 來實現(xiàn)。 華為海思的HI3531DV200是一款集成了ARM A53四核處理器性能強大的神經(jīng)網(wǎng)絡(luò)引擎,支持多種智能算法應用,集成多

    2024年02月13日
    瀏覽(27)
  • Ubuntu22.04安裝ns3全教程并整合ns3-ai

    Ubuntu22.04安裝ns3全教程并整合ns3-ai

    ns-3是一個開源的網(wǎng)絡(luò)仿真器,用于網(wǎng)絡(luò)通信系統(tǒng)和協(xié)議的建模與仿真。它被廣泛應用于研究、開發(fā)和測試各種網(wǎng)絡(luò)技術(shù)和算法。ns-3被構(gòu)建為一組相互協(xié)作的軟件庫,用戶可以編寫C++或Python編程語言的程序,并與這些庫進行鏈接或?qū)搿?? ns-3的整個可用庫集合依賴于第三方庫

    2024年02月07日
    瀏覽(138)
  • SuperMap Hi-Fi 3D SDK for Unity制作游戲引擎材質(zhì)

    SuperMap Hi-Fi 3D SDK for Unity制作游戲引擎材質(zhì)

    kele ????在交通,電力,規(guī)劃等行業(yè)中,有的對象常常具有很強的質(zhì)感,比如金屬質(zhì)感的 鋼軌,電力塔;陶瓷材質(zhì)的絕緣子;玻璃材質(zhì)的建筑幕墻等,但常規(guī)方式的表現(xiàn)效果 往往差強人意。 ????游戲引擎(Unity3D)中已有豐富的材質(zhì)資源庫,比如玻璃,金屬等材質(zhì),這

    2024年02月09日
    瀏覽(21)
  • Ubuntu20.04安裝NS3的3.36版本(最新版本)

    Ubuntu20.04安裝NS3的3.36版本(最新版本)

    1.1 VMware安裝包Ubuntu的光盤映像文件: 下載鏈接: 下載Ubuntu光盤映像文件VMware安裝包的網(wǎng)盤鏈接. 1.2 VMware安裝 安裝鏈接: VMware安裝的CSDN鏈接. 1.3 Ubuntu安裝 安裝鏈接: Ubuntu 安裝的CSDN鏈接. 2.1 安裝ns3的依賴庫 (1)安裝Python API 用戶的最低要求(3.30 版及更高版本,以及 ns-3-dev):

    2024年02月04日
    瀏覽(44)
  • 香橙派--關(guān)于jammy-xfce-arm64.f12a43b3e629442a073a7236bf9166ce.tar.lz4的rootfs定制與鏡像制作

    Linux SDK,即 orangepi-build,支持在安裝有 Ubuntu 22.04 的電腦上運行,所以下載 orangepi-build 前,請首先確保自己電腦已安裝的 Ubuntu 版本是 Ubuntu22.04。查看電腦已安裝的 Ubuntu 版本的命令如下所示,如果 Release 字段顯示的不是 22.04,說明當前使用的 Ubuntu 版本不符合要求,請更換系

    2024年02月03日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包