目录

关于 Debian rootfs

Debian 没有像 Ubuntu 提供 Ubuntu-Base 那样提供打包好的 rootfs, 但是 Debian 提供了一个制作 rootfs 的工具 debootstrap. 以下介绍使用 debootstrap 制作 Debian rootfs 的过程.

debootstrap 初始化一阶段

安装 debootstrap

sudo apt install 安装 debootstrap

准备一个工作目录, 例如 workroot, 初始化. 注意一定要加 mirror, 否则会非常慢

sudo debootstrap --arch=arm64 --foreign buster workroot/ http://mirrors.ustc.edu.cn/debian/

复制 qemu-aarch64-static 到目标系统, 如果没有的话要先安装一下sudo apt install qemu-user-static

sudo cp /usr/bin/qemu-aarch64-static workroot/usr/bin/

检查一下是否能正常执行

sudo chroot workroot/ /usr/bin/qemu-aarch64-static /bin/ls

准备 resolv.conf

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

debootstrap 初始化二阶段

chroot 到目标系统下

sudo chroot workroot/

第二阶段的初始化

/debootstrap/debootstrap --second-stage http://mirrors.ustc.edu.cn/debian/

初始化成功的话, 能看到I: Base system installed successfully

安装设置

安装基础软件

添加 Debian apt source

cat <<EOT > /etc/apt/sources.list
# 依次输入以下内容
deb http://mirrors.ustc.edu.cn/debian buster main contrib non-free
deb-src http://mirrors.ustc.edu.cn/debian buster main contrib non-free
deb http://mirrors.ustc.edu.cn/debian-security/ buster/updates main contrib non-free
deb-src http://mirrors.ustc.edu.cn/debian-security/ buster/updates main contrib non-free
deb http://mirrors.ustc.edu.cn/debian buster-updates main contrib non-free
deb-src http://mirrors.ustc.edu.cn/debian buster-updates main contrib non-free
EOT

检查是否正确

cat /etc/apt/sources.list

最后执行 apt update 更新, apt upgrade 升级

安装一些基础软件, 这一步之后系统大小为 434M

apt install locales dialog

配置 locales, 选择 en_US.UTF-8 UTF-8, en_US.UTF-8

dpkg-reconfigure locales

继续安装一些软件

apt install vim-tiny openssh-server sudo ifupdown net-tools udev iputils-ping sysstat smartmontools

添加驱动文件

仅使用kernel自带的驱动可以启动rootfs, 但是一些板载的外设, 例如SATA硬盘和USB, 会因为没有驱动而无法识别. 需要手动将这些驱动放到rootfs中.

通过uname -r可以看到目标系统的架构为4.4.35-hi3798mv2x, 由此可以确定驱动的路径为

/lib/modules/4.4.35-hi3798mv2x/

将系统中这部分文件提取后放到rootfs的对应目录下, 结构类似于

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

基础设置

设置主机名

echo n2ns1 > /etc/hostname

设置网络

cat << EOT > /etc/network/interfaces.d/10-eth0
# 依次输入
auto eth0
iface eth0 inet dhcp
EOT

设置 vim

nano /etc/vim/vimrc.tiny

# 修改compatible为nocompatible
set nocompatible
# 增加这行修复backspace键
set backspace=2

重要 给 root 用户设置密码, 否则刷完没法登录

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

添加欢迎界面, 新建 /etc/update-motd.d/60-welcome, 内容如下, 属性设为可执行

#!/bin/sh
#
IP=$(ifconfig eth0 | grep '\<inet\>'| grep -v '127.0.0.1' | awk '{print $2}' | awk 'NR==1')
DEVICE=$(dmesg 2> /dev/null | grep "CPU: hi3798" | awk -F ':[ ]' '/CPU/{printf ($2)}')
[ ! "$DEVICE" ] && DEVICE=$(head -n 1 /etc/regname 2> /null)
echo "
Board : ${DEVICE}
Module : $(egrep -oa "hi3798.+reg" /dev/mmcblk0p1| cut -d '_' -f1 | sort | uniq | tr "\\n" ",")
CPU : $(cat -v /proc/device-tree/compatible |sed 's/\^@//g') @ $(cat /proc/cpuinfo | grep "processor" | sort | uniq | wc -l) cores
Version : $(awk -F '[= "]' '/PRETTY_NAME/{print $3,$4,$5}' /etc/os-release) | $(uname -r)-$(getconf LONG_BIT)bit
Storage : $(df -m / | grep -v File | awk '{a=$4*100.0/$2;b=$4;c=$2} {printf("%.1f%% free, %.1fMiB of %.1fMiB\n",a,b,c)}')
Memory : $(free -m | grep Mem | awk '{a=$7*100.0/$2;b=$2} {printf("%.1f%% free, %.1fMiB total\n",a,b)}') | Swap:$(free -m | grep Swap | awk '{a=$4*100/$2;b=$4} {printf("%.1f%% %.1fMiB\n",a,b)}')
Up Time : $(awk '{a=$1/86400;b=($1%86400)/3600;c=($1%3600)/60;d=($1%60)} {printf("%d days %02d:%02d:%02d\n",a,b,c,d)}' /proc/uptime)
IP Addr : $IP
Temp : $(grep Tsensor /proc/msp/pm_cpu | awk '{print $4}')°C
MAC : $(ifconfig eth0 |grep "ether"| awk '{print $2}')
"

文件清理

安装完成后, 清理apt

apt autoremove
apt autoclean
apt clean

最后exit退出

制作 rootfs 镜像文件

# 生成一个适当大小的空镜像,这个大小参考du -h workroot/ -d1
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/
# 写入文件, 保留权限
sudo cp -rfp workroot/* rootfs/
# 取消挂载
sudo umount rootfs/
# 检查文件系统并自动修复
e2fsck -p -f rootfs.img
# 使镜像紧凑
resize2fs -M rootfs.img

参考

Hi3798MV200 恩兔N2 NS-1 (四): 制作 Debian rootfs的更多相关文章

  1. windows下制作debian U盘启动

    制作平台:Windows 7 制作debian版本:debian 7.4 wheezy 1.下载引导镜像,包含三个文件:boot.img.gz(解压备用).initrd.gz 和 vmlinuz. h ...

  2. 易企秀 we+ Maka 兔展 四大H5页面制作工具

    H5这个由HTML5简化而来的词汇,正通过微信广泛传播.H5是集文字.图片.音乐.视频.链接等多种形式的展示页面,丰富的控件.灵活的动画特效.强大的交互应用和数据分析,高速低价的实现信息传播,非常适合 ...

  3. mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(四制作根文件系统及通过NFS挂载文件系统)

    http://blog.csdn.net/yinjiabin/article/details/7489563 根文件系统一般包括: 1)基本的文件系统结构,包含一些必须的目录,比如:/dev,/pro ...

  4. Unity3D游戏开发从零单排(四) - 制作一个iOS游戏

    提要 此篇是一个国外教程的翻译,尽管有点老,可是适合新手入门. 自己去写代码.debug,布置场景,能够收获到非常多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一 ...

  5. 吴恩达机器学习笔记(四) —— BP神经网络

    主要内容: 一.模型简介 二.一些变量所代表的含义 三.代价函数 四.Forward Propagation 五.Back Propagation 六.算法流程 待解决问题: 视频中通过指出:当特征变 ...

  6. 小兔JS教程(四)-- 彻底攻略JS数组

    在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...

  7. 使用unetbootin制作Debian安装U盘

    有时需要在没有光驱的裸机上安装系统,这时我们可以使用unetbootin制作一个系统安装U盘. 1.在网上下载好vmlinuz,initrd.gz,boot.img.gz. 2.然后使用unetboo ...

  8. helpera64开发板下制作ubuntu rootfs镜像

    下一篇路径:https://www.cnblogs.com/jizizh/p/10499448.html 环境: HelperA64开发板 Linux3.10内核 时间:2019.02.14 目标:定 ...

  9. helpera64开发板下制作ubuntu rootfs镜像(二)

    上一篇路径:https://www.cnblogs.com/jizizh/p/10380513.html Helpera64开发板ubuntu剩于工作: 1.背光调节 答:/sys/class/bac ...

  10. NS2仿真:使用NS仿真软件模拟简单网络模型

    NS2仿真实验报告1 实验名称:使用NS仿真软件模拟简单网络模型 实验日期:2015年3月2日~2015年3月7日 实验报告日期:2015年3月8日 一.实验环境(网络平台,操作系统,网络拓扑图) 运 ...

随机推荐

  1. 2021-02-01:Redis 集群会有写操作丢失吗?

    福哥答案2021-02-01: 以下情况可能导致写操作丢失:1.过期 key 被清理.2.最大内存不足,导致 Redis 自动清理部分 key 以节省空间.3.主库故障后自动重启,从库自动同步.4.单 ...

  2. 2021-07-06:股票问题3。给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(

    2021-07-06:股票问题3.给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易.注意:你不能同时参与多笔交易( ...

  3. PHP代码审计——ThinkPHP基础

    一.ThinkPHP概述 1. ThinPHP是一个轻量级的PHP框架,旨在提供快速开发Web应用程序的工具和资源.它采用了MVC(Model-View-Controller)架构,使开发人员可以更好 ...

  4. WPF入门教程系列二十六——DataGrid使用示例(3)

    WPF入门教程系列目录 WPF入门教程系列二--Application介绍 WPF入门教程系列三--Application介绍(续) WPF入门教程系列四--Dispatcher介绍 WPF入门教程系 ...

  5. SPI通信协议

    1. SPI 通信协议简介 SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设 备接口,是一种高速全双工的通信总线.它被广泛地使用在 A ...

  6. 微生物组分析软件 QIIME 2 安装小记

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. QIIME 2 是一个功能强大,可扩展,分散式的(decentralized)微生物组分析软件 ...

  7. 一次 SSH 攻击与处理小记

    这是我在简书看到的一个作者经历,结合小编自己的一些实践,抛砖引玉,给大家分享一下. 有段时间发现集群异常卡顿.担心的事情终于发生了,使用命令 lastb 查看了一下,我的天呢,好多未知的 IP,我随便 ...

  8. 没用,随便写的(Dec_8_2022)

    import numpy as np from PIL import Image import pandas as pd import matplotlib.pyplot as plt # 第一个 # ...

  9. K8S 证书详解(认证)

    K8S 证书介绍 在 Kube-apiserver 中提供了很多认证方式,其中最常用的就是 TLS 认证,当然也有 BootstrapToken,BasicAuth 认证等,只要有一个认证通过,那么 ...

  10. 关于VS2022使用EF生成实体模型报错的问题:运行转换:System.NullReferenceException:对象引用未设置为对象的示例。

    起因: 之前版本vs2022生成EF模型一直没有问题,在更新了最新的vs2022之后,版本号17.6+,出现此问题: 运行转换:System.NullReferenceException:对象引用未设 ...