构架带有ros机器人操作系统的aarch64 ubuntu20根文件系统

一.构建基本操作系统

        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

猜你喜欢

转载自blog.csdn.net/yangwenchao1983/article/details/131760793
今日推荐