创建 Ubuntu 根文件系统
准备工作
安装qemu
在Linux PC主机上安装模拟器:
sudo apt-get install qemu-user-static
下载和解压 ubuntu-core
Firefly-rk3399 ubuntu根文件系统是基于Ubuntu base 16.04来创建的。用户可以到ubuntu cdimg 下载,选择下载ubuntu-base-16.04.1-base-arm64.tar.gz 。
下载完之后,创建临时文件夹并解压根文件系统:
mkdir ubuntu sudo tar -xpf ubuntu-base-16.04.1-base-arm64.tar.gz -C temp
修改根文件系统
准备工作
准备网络:
sudo cp -b /etc/resolv.conf ubuntu/etc/resolv.conf
准备qemu
sudo cp /usr/bin/qemu-aarch64-static ubuntu/usr/bin/
进入根文件系统进行操作:
sudo chroot ubuntu
更新及安装
更新:
apt update apt upgrade
安装自己需要的功能
apt install vim git ....(根据自己需求添加)
可能出现错误:
E: Unable to locate package xxxx
安装包的源没有添加到/etc/apt/source.list
中,导致无法识别安装包,可以自行添加源,也可以使用下面给出的source.list
覆盖原来的/etc/apt/source.list
文件:
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://ports.ubuntu.com/ubuntu-ports/ xenial main restricted
deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates main restricted
deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates main restricted
## Uncomment the following two lines to add software from the 'universe'
## repository.
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://ports.ubuntu.com/ubuntu-ports/ xenial universe
deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial universe
deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://ports.ubuntu.com/ubuntu-ports/ xenial-backports main restricted
deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-backports main restricted
deb http://ports.ubuntu.com/ubuntu-ports/ xenial-security main restricted
deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-security main restricted
deb http://ports.ubuntu.com/ubuntu-ports/ xenial-security universe
deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-security universe
deb http://ports.ubuntu.com/ubuntu-ports/ xenial-security multiverse
deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-security multiverse
添加用户及设置密码
添加用户
useradd -s '/bin/bash' -m -G adm,sudo firefly
给用户设置密码:
passwd firefly
给root用户设置密码:
passwd root
修改完自己的根文件系统就可以退出了。
exit
安装ros-kinetic-ros-base(sources.list建议写入上面的官方源,不然容易出问题)
进入根文件系统
sudo chroot ubuntu
设置etc/apt/sources.list.d/ros-latest.list
sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
但会失败,不如直接写
deb http://packages.ros.org/ros/ubuntu xenial main
设置key
apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
更新package
apt-get update
安装ros-kinetic-ros-base
apt-get install ros-kinetic-ros-base
可能会出现如下错误
root@mynt-xmi:/# apt-get install ros-kinetic-ros-base
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
ros-kinetic-ros-base : Depends: ros-kinetic-actionlib but it is not going to be installed
Depends: ros-kinetic-bond-core but it is not going to be installed
Depends: ros-kinetic-class-loader but it is not going to be installed
Depends: ros-kinetic-dynamic-reconfigure but it is not going to be installed
Depends: ros-kinetic-nodelet-core but it is not going to be installed
Depends: ros-kinetic-pluginlib but it is not going to be installed
Depends: ros-kinetic-ros-core but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
这种是属于sources.list源问题,无法找到部分依赖,不建议使用国内源,虽然安装软件快,但是可能有残缺或者无法连接的源存在,用上述官方源。出现问题建议重新配置源和修复,必须保证apt-get update不出现无法定位或者链接错误的error。检查网络问题等。
apt-get clean
apt-get update
apt-get upgrade
apt-get install -f
再次安装ros-kinetic-ros-base
安装完毕后初始化rosdep
注意:在使用ROS之前需要初始化rosdep
rosdep init
这个时候可能就会出错
错误1:
64位系统下:Some packages could not be installed. 错误
在很多64位机器上如果安装 ros-kinetic-desktop-full 会出现如下错误:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
ros-kinetic-desktop-full : Depends: ros-kinetic-desktop but it is not going to be installed
Depends: ros-kinetic-simulators but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
解决这一问题的方法一个是只安装核心库 ros-kinetic-desktop 或者可以尝试先卸载下面的组件:
apt-get remove gazebo-* sdformat-*
错误2:
default sources list file already exists
在运行 rosdep init 时可能出现如下错误:
ERROR: default sources list file already exists:
/etc/ros/rosdep/sources.list.d/20-default.list
Please delete if you wish to re-initialize
通常这是因为你之前曾经安装过 ROS 系统的某个版本,只需按照提示删除已经存在的初始化文件即可:
rm /etc/ros/rosdep/sources.list.d/20-default.list
然后再重新运行 rosdep init 就没有问题了。
错误3:也是我遇到的错误
ERROR: cannot download default sources list from:
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.
修复办法简单粗暴直接创建etc/ros/rosdep/sources.list.d/20-default.list这个文件,进入这个文件目录
wget https://raw.github.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
继续初始化rosdep注意:之前都是root用户所以没有加sudo,之前的ros安装命令都是需要root权限的,但rosdep update
必须在普通用户下执行,目前的系统不支持sudo,需要在root用户下apt-get install sudo
su mynt
rosdep update
不顺利的话又会出错如果是错误码110就是网络问题,自己想办法解决网络问题
如果错误码是111,访问被拒绝有可能是域名服务器问题推荐使用
解决方法:
sudo vim /etc/resolv.conf
改成下面两句:
nameserver 8.8.8.8 #google域名服务器
nameserver 8.8.4.4 #google域名服务器
多试几次,我的后来就成功了
配置ROS环境
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
安装依赖项
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
测试ROS是否安装成功
roscore
报错
解决方法
以上问题是由于ROS环境变量ROS_MASTER_URI设置错误导致的,重新设置该变量即可。
打开~/.bashrc文件,添加或修改环境变量ROS_HOSTNAME和ROS_MASTER,即改为:
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
修改并保存~/.bashrc文件后,再重新启动下该文件source ~/.bashrc,再运行roscore即可正常运行
至此ros已安装完毕,退出文件系统exit
制作根文件系统
制作自己的根文件系统,大小依据自己的根文件系统而定,注意依据temp文件夹的大小来修改count值
mkdir rootfs
dd if=/dev/zero of=linuxroot.img bs=1M count=4000
mkfs.ext4 linuxroot.img
sudo mount linuxroot.img rootfs/
sudo cp -rfp temp/* rootfs/
sudo umount rootfs/
e2fsck -p -f linuxroot.img
resize2fs -M linuxroot.img
这样 linuxroot.img 就是最终的根文件系统映像文件了。
FAQs
根文件系统加载后,大小不正常,未占满整个分区:
在系统正确加载后执行扩展文件系统命令:
resize2fs /dev/mmcblk1p6 --> rootfs 分区
查看 parameter文件中,root= 节点设备