配置过程
要求本地的ubunt版本高于要使用chroot制作的文件系统
1.下载
这里把要用chroot制作的ubunt文件系统放在armrootfs文件夹下
hann@hann-virtual-machine:~/armrootfs$ wget http://cdimage.ubuntu.com/ubuntu-base/releases/16.04/release/ubuntu-base-16.04.6-base-armhf.tar.gz
解压
hann@hann-virtual-machine:~/armrootfs$ sudo tar -zxvf ubuntu-base-16.04.6-base-&&&&&&&&&&&&&&
要使用chroot,所以需要能够在chroot环境执行armhf版本的binary,
所以我们要接触linux的binfmt机制和qemu static解释器
sudo apt-get install qemu-user-static
sudo cp /usr/bin/qemu-arm-static /home/hann/armrootfs/usr/bin/
先将本机的dns配置复制到目标rootfs,后面联网时会用到
sudo cp -b/etc/resolv.conf ~/armrootfs/etc/resolv.conf
4.挂载和卸载脚本
注意在刚开始挂载一次,在做完文件系统打包前 卸载一次
#!/bin/bash
function 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}
}
function 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 bothparameters were missing"
echo ""
echo "1'st parameter can be one ofthese: -m(mount) OR -u(umount)"
echo "2'nd parameter is the full pathof rootfs directory(with trailing '/')"
echo ""
echo "For example: ch-mount -m/media/sdcard/"
echo ""
echo 1st parameter : ${1}
echo 2nd parameter : ${2}
fi
5.安装基本的命令
apt update
apt upgrate
安装必须
apt-get install\
language-pack-en-base \
sudo \
ssh \
net-tools \
ethtool \
wireless-tools \
ifupdown \
network-manager \
iputils-ping \
rsyslog \
bash-completion \
htop \
--no-install-recommends
设置用户密码
root@hann-virtual-machine:/# sudo useradd -m -s /bin/sh hann
root@hann-virtual-machine:/# cat /etc/hostname
hann
root@hann-virtual-machine:/# passwd hann
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
设置本机入口ip:
echo"127.0.0.1 localhost">>/etc/hosts
echo"127.0.1.1 ubuntu-arm">>/etc/hosts
sudo vim /root/.bashrc添加(未实现)
export LANGUAGE="en_US.UTF-8"
export LANG=en_US:zh_CN.UTF-8
export LC_ALL=C
这个没搞成功
允许自动更新dns:
dpkg-reconfigureresolvconf
设置时区:
dpkg-reconfiguretzdata
7.设置可使用root用户登录ssh
安装ssh后,默认情况下不允许使用root用户登录,需作以下修改:
root@chry-PC:/# vi /etc/ssh/sshd_config
PermitRootLogin prohibit-password,改成PermitRootLogin yes
X11Forwarding yes# 这个选为yes 可以进入xservice
设置串口
因为暂时未安装桌面,所以这里的配置要具体和内核中登录的串口的设备对应起来,不然对导致无法通过串口登录的问题。具体可能会因为目标板差异而不同,具体要参考所使用的平台进行修改。 我的目标开发板为rk1808,它的登录串口为ttyFIQ0,
vi /lib/systemd/system/serial-getty@.service 修改BindsTo选项:
dev-%i.device 改成 dev-%i
如果不执行这一步,烧录文件系统后启动,串口可能会卡死。 :https://blog.csdn.net/cry1994/article/details/100518871
串口自动登录root用户(可选)
修改ExecStart选项:
-/sbin/agetty --keep-baud 115200,38400,9600 %I $TERM 改成 -/sbin/agetty -a root --keep-baud 115200,38400,9600 %I $TERM
允许root用户登录串口(可选)
vi /etc/pam.d/login
搜索pam_securetty.so,找到改行在前面加#号注释掉: #auth [success=ok new_authtok_reqd=ok ignore=ignore user_unknown=bad default=die] pam_securetty.so
几个不错的知识点:
走进Linux之systemd启动过程 :该文介绍了系统启动init父进程后:是如何一步步操作的:
所以,这里需要把你原板子文件系统的 /etc/fstab 挂载分区部分copy过来
Linux在远程X Server上显示图形界面:该文告诉我们,怎么启动xservice
打包
打包 img rk1808烧录格式
使用dd指令制作空的固件容器
dd if=/dev/zero of=armrootfs.img bs=1M count=2048
sudo mkfs.ext4 armrootfs.img
将arm文件系统内容制作到armrootfs.img
mkdir ubuntu-mount
sudo mount armrootfs.img ubuntu-mount/
sudo cp -rfp armrootfs/* ubuntu-mount/
sudo umount ubuntu-mount/
e2fsck -p -f armrootfs.img
resize2fs -M armrootfs.img
打包 tar.bz2这个就较为简单 imx6q的文件系统烧录格式
cd armrootfs
tar -jcvf ../rootfs.tar.bz2 ./*
启动
启动ssh 服务
service ssh start
配置IP 网关 mac dns 等使其可以联网
略
ping baidu.com
ping通后,只要emmc空间够,想怎么折腾怎么折腾