一.构建基本操作系统
1.下载最小ubuntu20文件系统
wget http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/ubuntu-base-20.04.5-base-arm64.tar.gz
mkdir rootfs
tar -xpf ubuntu-base-20.04.5-base-arm64.tar.gz -C rootfs
2.安装qemu工具
sudo apt-get install qemu-user-static
cd rootfs
cp /usr/bin/qemu-aarch64-static usr/bin/
3. 配置DNS
cp -b /etc/resolv.conf etc/resolv.conf
4. 进入基础系统
cd .. # 退出到rootfs目录
./ch-mount.sh -m rootfs/
#!/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 chroot ${2}
}
function umnt() {
echo "UNMOUNTING"
sudo umount ${2}proc
sudo umount ${2}sys
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 both parameters were missing"
echo ""
echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
echo "2'nd parameter is the full path of 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 upgrade
apt install usbutils network-manager sudo fdisk vim nano openssh-server iputils-ping wget curl iproute2 dialog locales kmod zip unzip u-boot-tools initramfs-tools tcpdump statserial cutecom cpufrequtils modemmanager
apt install wpasupplicant udhcpc htop pciutils
apt install rsyslog udev dbus systemd openssh-client dosfstools parted git sysstat less man
apt install ubuntu-desktop-minimal
apt install usbutils
apt install apt-file usbutils openssh-server sudo fdisk vim iputils-ping wget curl iproute2 dialog locales kmod zip unzip cpufrequtils tcpdump statserial
apt install wpasupplicant udhcpc pciutils
apt install rsyslog udev dbus systemd openssh-client dosfstools parted git sysstat vim
6.安装lxde轻型桌面
apt install lxde
apt-file update
7.安装ROS1和ROS2
sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
1.ROS1:
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
apt install ros-noetic-desktop-full
mv /opt/ros ros-noetic
2.ROS 2 :
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
source /opt/ros/foxy/setup.bash
echo " source /opt/ros/foxy/setup.bash" >> ~/.bashrc
apt install ros-foxy-desktop
mv /opt/ros/ros-foxy
3.查看ros的版本
先在终端输入roscore
打开新终端,再输入,rosparam list
再输入rosparam get /rosdistro就能得到版本
二.系统基本配置
1. 添加sudo用户
useradd -m fire -g sudo -s /bin/bash -d /home/fire
passwd fire
fire666
2. 然后是默认不休眠和免密登录
gnome-terminal嵌入到gnome-menu
自动登录
/etc/gdm3/custom.conf
AutomaticLoginEnable=True
AutomaticLogin=gaussian
3. Ubuntu网络设置wired消失问题的解决方法
/etc/NetworkManager/NetworkManager.conf
将【false】改为【true】,然后点击右上方【保存】,退出文本编辑。
touch /etc/NetworkManager/conf.d/10-globally-managed-devices.conf
service network-manager restart
4.删除系统中不再需要的deb包
sudo apt autoremove
rm -rf /root/.bash_history
5.打包文件系统
exit
./ch-mount.sh -u rootfs/
tar -cvf ../rootfs.tar *
三.制作rootfs.img
cd ..
dd if=/dev/zero of=rootfs.img bs=2K count=3M
mkfs.ext4 rootfs.img
mount rootfs.img rootfs
tar -xvf rootfs.tar -C rootfs
如果有编译为模块的内核驱动
cp -rf lib/modules/ rootfs/lib/
umount rootfs
e2fsck -p -f rootfs.img
resize2fs -M rootfs.img