debootstrap定制arm平台linux

debootstrap制作arm平台linux

参考资料

Debootstrap - Debian Wiki

一、自动安装
1、组件安装

sudo apt install -y qemu-user-static
sudo apt install -y ubuntu-dev-tools
sudo apt install -y debootstrap

2、命令说明
sudo debootstrap --arch |平台|  |发行版本代号|  |目录| |安装源|
3、安装debian

sudo mkdir /mnt/debian 
sudo debootstrap --arch armhf buster /mnt/debian  https://mirrors.tuna.tsinghua.edu.cn/debian/
#常见架构i386、amd64、armel、armhf、arm-64
#下面是debian 11 架构arm-64
#sudo debootstrap --arch arm64 bullseye /mnt/debian_arm64  https://mirrors.tuna.tsinghua.edu.cn/debian/

4、复制qemu

sudo cp /usr/bin/qemu-arm-static /mnt/debian/usr/bin/

5、进入目录更新组件

sudo chroot /mnt/debian

echo "debian-arm" >/etc/hostname
echo "127.0.0.1 localhost" >/etc/hosts
echo "127.0.0.1 debian-arm" >/etc/hosts
echo "nameserver 8.8.8.8" >/etc/resolv.conf
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#只启动shell下面不是必选项
#apt install net-tools vim sudo bash-completion systemd systemd-coredump makedev locales openssh-server pciutils usbutils
passwd root
adduser test
exit

6、制作文件

sudo dd if=/dev/zero of=debian.img bs=1 count=0 seek=1024M
sudo mkfs.ext4  debian.img
sudo mount debian.img /mnt/temp
sudo cp -ar /mnt/debian/* /mnt/temp/
sudo umount /mnt/temp
#空间不足时
#qemu-img resize debian.img +2G
$resize2fs /dev/vda

7、模拟启动

sudo qemu-system-arm -M virt -cpu cortex-a7 -nographic -smp 4 -m 1024 \
-kernel zImage  \
-append "console=ttyAMA0,115200 init=/sbin/init root=/dev/vda rw  ip=dhcp" \
-drive format=raw,if=none,file=debian.img,id=ha,index=0 -device virtio-blk-device,drive=ha  \
-netdev bridge,br=virbr0,id=net0  -device virtio-net-device,netdev=net0,mac=12:22:33:44:55:66
启动界面
[  OK  ] Started Getty on tty1.
[  OK  ] Started Serial Getty on ttyAMA0.
[  OK  ] Reached target Login Prompts.
Debian GNU/Linux 10 test-linnux ttyAMA0
test-linnux login: root

 二、手工制作

wget https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cdimage/ubuntu-base/releases/21.04/release/ubuntu-base-21.04-base-armhf.tar.gz
sudo rm -rf /mnt/ubuntu
sudo mkdir /mnt/ubuntu
sudo tar -xvf ubuntu-base-21.04-base-armhf.tar.gz -C /mnt/ubuntu
sudo cp /usr/bin/qemu-arm-static /mnt/ubuntu/usr/bin
sudo mount -t proc /proc /mnt/ubuntu/proc
sudo mount -t sysfs /sys /mnt/ubuntu/sys
sudo mount -o bind /dev /mnt/ubuntu/dev
sudo mount -o bind /dev/pts /mnt/ubuntu/dev/pts
#sudo cp /etc/apt/sources.list /mnt/ubuntu/etc/apt/
sudo cp /etc/resolv.conf /mnt/ubuntu/etc/
sudo chroot /mnt/ubuntu
echo "nameserver 8.8.8.8" >/etc/resolv.conf
echo "ubuntu-arm" >/etc/hostname
echo "127.0.0.1 localhost" >/etc/hosts
echo "127.0.0.1 ubuntu-arm" >/etc/hosts
#passwd root
#adduser test
apt update
apt install -y  wget net-tools systemd  makedev locales vim openssh-server sudo bash-completion rsyslog 
apt install -y systemd-coredump
apt install -y iproute2 udhcpc iputils-ping
exit
#Geographic area: 6 Time zone: 70
#下面运行一次
sudo umount /mnt/ubuntu/proc
sudo umount /mnt/ubuntu/sys
sudo umount /mnt/ubuntu/dev/pts
sudo umount /mnt/ubuntu/dev

#可能要重启一次
sudo rm ubuntu.img
sudo dd if=/dev/zero of=ubuntu.img bs=1 count=0 seek=2048M
sudo mkfs.ext3  ubuntu.img
sudo mount ubuntu.img /mnt/temp
sudo cp -ar /mnt/ubuntu/* /mnt/temp/
sudo umount /mnt/temp
#安装shell
#apt install -y gnome-core gnome-shell gnome-session
apt install xfce4
systemctl set-default multi-user.target
systemctl set-default graphical.target
#ttyAMA0 system 启动
sudo cp /lib/systemd/system/serial-getty@.service /lib/systemd/system/serial-getty@ttyAMA0.service
sudo ln -s /lib/systemd/system/serial-getty@ttyAMA0.service /etc/systemd/system/getty.target.wants/serial-getty@ttyAMA0.service
#"%i.device”这个好像不用改
#sudo cp /mnt/temp/etc/init/tty1.conf /mnt/temp/etc/init/ttyS0.conf
#exec /sbin/getty -L 115200 ttyS0 vt102

测试结果

systemd[1]: Detected virtualization qemu.
Welcome to Ubuntu 21.04!
[  OK  ] Started Serial Getty on ttyAMA0.
[  OK  ] Reached target Login Prompts.
         Starting Hostname Service...
Ubuntu 21.04 ubuntu-arm ttyAMA0
ubuntu-arm login:

三、盒子定制测试

前面作为学习用,下面找个盒做下试验,这个比较浪费时间,所选用盒子资料太少。主要集中在kernel编译烧录和arm-linux版本选择,调试排查错误。

1、ubuntu 下制作镜像文件,过程基本同上。

sudo debootstrap --arch armhf jessie /mnt/jessie  http://mirrors.aliyun.com/debian/
sudo cp /usr/bin/qemu-arm-static /mnt/jessie/usr/bin/

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

sudo chroot /mnt/jessie
echo "jessie-arm" >/etc/hostname
echo "127.0.0.1 localhost" >/etc/hosts
echo "127.0.0.1 jessie-arm" >/etc/hosts
echo "nameserver 8.8.8.8" >/etc/resolv.conf
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
passwd root
adduser test
apt-get update
apt-get upgrade
exit

sudo umount /mnt/jessie/proc
sudo umount /mnt/jessie/sys
sudo umount /mnt/jessie/dev/pts
sudo umount /mnt/jessie/dev

sudo dd if=/dev/zero of=jessie.img bs=1 count=0 seek=2048M
sudo mkfs.ext4  jessie.img
sudo mount jessie.img /mnt/temp
sudo cp -ar /mnt/jessie/* /mnt/temp/
sudo umount /mnt/temp
sudo tune2fs -m 5 jessie.img

 2、盒子配置

硬件
1    cpu:    armv7_a7X4
2    内存:    1G
3    mmc:    8G
4    usb:    X2
5    hdmi:   X1
6    sd:     X1
setenv baudrate 115200
setenv ethaddr 00:00:00:00:00:00
setenv ipaddr 192.168.1.100
setenv netmask 255.255.255.0
setenv gatewayip 192.168.1.1
setenv serverip 192.168.1.10
setenv bootdelay 5

setenv bootcmd 'mmc read 0x0 0x1000000 0x1000 0x4000;bootm 0x1000000;'

tftp 0x1000000 kernel.bin;
mmc write 0x0 0x1000000 0x1000 0x4000

setenv bootargs ' init=/bin/init console=ttyAMA0,115200 root=/dev/mmcblk0p6 rootfstype=ext4 rootwait blkdevparts=mmcblk0:1M(fastboot),1M(bootargs),10M(kernel),2048M(linux),2048M(ubuntu),2048M(debian),128M(free) '

saveenv
reset
===============
mount /dev/mmcblk0p5 /mnt/rootfs
mkdir /mnt/rootfs/test
cp -r /kmod /mnt/rootfs
cp -r /dev /mnt/rootfs/test
cp -r /dev /mnt/rootfs
==============
#vi /mnt/rootfs/bin/init
=============
#!/bin/sh
#开启autofs和复制dev后可注释掉
#mount -t proc proc /proc
#mount -vt sysfs sysfs /sys
#mount -v --bind /test/dev /dev
#mount -o bind /test/dev/pts /dev/pts
cd /
cd kmod
./load
cd /
exec /sbin/init
:wq
chmod 777 /mnt/rootfs/bin/init
#cp 文件
mount /dev/mmcblk0p4 /test
cp /test/usr/lib /usr
cp /test/usr/share /usr
....

 3、网络配置

#手工设置
ifconfig eth0 192.168.1.100 netmask 255.255.255.0
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.1.1
#自动设置
vi /etc/network/interfaces 
auto lo
iface lo inet loopback
# To use dhcp:
#
# auto eth0
# iface eth0 inet dhcp
auto eth0
iface eth0 inet static
     address 192.168.1.100
     network 192.168.1.0
     netmask 255.255.255.0
     broadcast 192.168.1.255
     gateway 192.168.1.1

4、 桌面和vnc

#安装
apt-get install sudo net-tools xrdp xfce4 tightvncserver
#启动
vncserver :1 -geometry 800x600 -depth 16 -pixelformat rgb565
#关闭
vncserver -kill :1
#连接
IP:5901

5、shell启动界面

systemd[1]: systemd 215 running in system mode. (+PAM +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ -SECCOMP -APPARMOR)
systemd[1]: Detected architecture 'arm'.
Welcome to Debian GNU/Linux 8 (jessie)!
[  OK  ] Reached target Multi-User System.
[  OK  ] Reached target Graphical Interface.
         Starting Update UTMP about System Runlevel Changes...
[  OK  ] Started Update UTMP about System Runlevel Changes.
Debian GNU/Linux 8 jessie-arm ttyAMA0
jessie-arm login:

6、xfce4 图形界面vnc连接

7、问题

1、ttyAMA0登录
vi /etc/inittab
T2:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

2、内核devtmpfs支持
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y

3、内核CGROUPS支持
CONFIG_CGROUPS=y
#其他配置按需修改:
CONFIG_AUTOFS4_FS=y
CONFIG_FHANDLE=y
CONFIG_EXPORTFS=y
CONFIG_UNIX_DIAG=y

4、soket: Permission deniedsoket
ping 127.0.0 
setcap cap_net_raw+p /bin/ping
vi /etc/group
inet:x:3003:root
net_raw:x:3004:root

cp /lib/systemd/system/serial-getty@.service /lib/systemd/system/serial-getty@ttyAMA0.service
ln -s /lib/systemd/system/serial-getty@ttyAMA0.service /etc/systemd/system/getty.target.wants/serial-getty@ttyAMA0.service
#临时将"%i.device”改为“%i”,仍然报错但可登录,将这两行注释后不再报错,影响不大先不管吧。

#key的问题 --keyring=/usr/share/keyrings/ubuntu-archive-keyring.gpg

8、尝试

音视频涉及HDMI驱动,这个比较复杂,未深入研究,以后有时间来玩。
已测试成功部分:
1、实现ssh连接
2、实现hdmi播放mp3
3、实现hdmi播放mp4 画面不太正常,未分析。
4、实现hdmi显示xfce4
5、优化启动脚本及流程(暂时没时间)

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值