zynq7020 ubuntu_base 跟文件系统
整体流程
- 制作 ubuntu_base 镜像
- 运行 petalinux 构建的 ramdisk 系统
- 用 ramdisk 系统把 ubuntu_base 镜像烧录到 emmc
- 从 emmc 跟文件系统 启动内核
制作 ubuntu_base 镜像
制作 ubuntu_base 镜像
sudo apt-get install qemu-user-static # 安装 qemumkdir temp
sudo tar -xpf ubuntu-base-18.04.5-base-arm64.tar.gz -C temp # 解压sudo cp -b /etc/resolv.conf temp/etc/resolv.conf # 准备网络
sudo cp /usr/bin/qemu-aarch64-static temp/usr/bin/ # 准备qemu./mount.sh -m temp/ # 挂载
sudo chroot temp/ # 进入跟文件系统apt update # 更新
apt upgradeapt install -y systemd # 必须 sbin/init
apt install udev # 必须 不装串口初始化卡住
apt install net-tools # ifconfig
apt install vim # vim
sudo apt install iputils-ping # pinguseradd -s '/bin/bash' -m -G adm,sudo c # 添加用户 c
passwd c # 设置密码
passwd root # 设置密码du . -sh # 统计大小exit # 退出跟文件系统
./mount.sh -u temp/ # 卸载mkdir rootfs #
dd if=/dev/zero of=linuxroot.img bs=1M count=500 # 创建镜像文件
mkfs.ext4 linuxroot.img # 格式化
sudo mount linuxroot.img rootfs/ # 挂载到rootfs
sudo cp -rfp temp/* rootfs/ # 复制
sudo umount rootfs/ # 卸载
e2fsck -p -f linuxroot.img # 自动检查并修复
resize2fs -M linuxroot.img # 最小化 ext 文件系统镜像大小
挂载卸载脚本
#!/bin/bash
mnt() {echo "mount"sudo mount -t proc /proc ${2}procsudo mount -t sysfs /sys ${2}syssudo mount -o bind /dev ${2}devsudo mount -o bind /dev/pts ${2}dev/pts
}
umnt() {echo "umount"sudo umount ${2}procsudo umount ${2}syssudo umount ${2}dev/ptssudo umount ${2}dev
}if [ "$1" == "-m" ] && [ -n "$2" ] ;
thenmnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
thenumnt $1 $2
fi
petalinux 构建 ramdisk 系统
需要用到的命令
- ifconfg : 配置 ip
- ssh : 上传 ubuntu_base 镜像
- mkfs.ext4 : 初始化 ext4
- mkfs.fat : 初始化 fat32
配置 rootfs 来支持命令
petalinux-config -c rootfs# 勾选以下
ethtools # ifconfg
e2fsprogs # mkfs.ext4
dosfstools # mkfs.fat# 自带sshpetalinux-build -c rootfs
启动 ramdisk
# u-boot 设置网络
setenv ipaddr 192.168.137.10
setenv serverip 192.168.137.1
ping 192.168.137.1# 启动ramdisk
tftpboot 0x10000000 uImage
tftpboot 0x11000000 system.dtb
tftpboot 0x11A00000 rootfs.cpio.gz.u-boot
setenv bootargs console=ttyPS0,115200 root=/dev/ram rw earlyprintk
bootm 0x10000000 0x11A00000 0x11000000# 设置网络
ifconfig eth0 up
ifconfig eth0 192.168.137.10
ping 192.168.137.1# ssh 登录并上传 ubuntu_base 镜像
烧录到 emmc
ls /dev/mmcblk* # 查看
sudo fdisk /dev/mmcblk1 # 格式化# 删除
p
d
d# boot分区
n
p
+500M# 跟文件分区
n
p# 设置为fat32
t
1
c# 格式化
mkfs.fat -F 32 -n boot /dev/mmcblk1p1
mkfs.ext4 -L rootfs /dev/mmcblk1p2df -h
umount /dev/mmcblk1p2 # 卸载
dd if=linuxroot.img of=/dev/mmcblk1p2 bs=2M # 写入
resize2fs /dev/mmcblk1p2 # 扩容
从 emmc 跟文件系统 启动
# u-boot 设置网络
setenv ipaddr 192.168.137.10
setenv serverip 192.168.137.1
ping 192.168.137.1# 启动分区的跟文件系统
tftpboot 0x10000000 zImage
tftpboot 0x11000000 system.dtb
setenv bootargs 'console=ttyPS0,115200 root=/dev/mmcblk1p2 rw rootwait'
bootz 0x10000000 - 0x11000000setenv bootcmd 'tftpboot 0x10000000 zImage; tftpboot 0x11000000 system.dtb; bootz 0x10000000 - 0x11000000'
saveenv
# setenv bootargs 'console=ttyPS0,115200 root=/dev/mmcblk1p2 rw rootwait' init=/bin/bash
ubuntu_base 系统初始化
# 设置网络
ifconfig eth0 up
ifconfig eth0 192.168.137.10
ping 192.168.137.1vim /etc/resolv.conf
nameserver 192.168.137.1
options eth0route add default gw 192.168.137.1 eth0#ssh
apt install ssh
systemctl status sshd# 选配 sudo命令报错
hostnamectl set-hostname ccj_pcvim /etc/hosts
127.0.1.1 ccj_pc# 选配 串口不能用root登录
vim /etc/securetty
ttyPS0 # 添加这一行#开机自启网络
vim /etc/systemd/network/10-eth0.network
[Match]
Name=eth0[Network]
Address=192.168.137.10/24
Gateway=192.168.137.1
DNS=192.168.137.1sudo systemctl enable systemd-networkd
sudo systemctl restart systemd-networkd# insmod
apt install kmod
测试
略