chroot构建ubunt文件系统 在rk1808 imx6q上测试过

配置过程

要求本地的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空间够,想怎么折腾怎么折腾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值