本文参考资料:https://blog.csdn.net/weixin_41608556/article/details/118253137
笔者的板子处于出厂状态,uboot和linux内核都是放在emmc上的,板子开机从emmc启动uboot。 但ubuntu根文件系统是放在SD卡的一个ext4分区上的,不是以镜像的方式存在。 插上SD卡,板子从emmc启动uboot后马上按下回车键进入uboot命令模式,执行: setenv mmcroot /dev/mmcblk0p4 rootwait rw boot 板子就从SD卡的第四个分区启动ubuntu系统了。SD卡的第四个分区存放的就是ubuntu18.04的根文件系统。 这个只是临时修改环境变量的值,重启后就复原了,不用担心。出厂默认的mmcroot值为: mmcroot=/dev/mmcblk1p2 rootwait rw 也就是正点原子默认出厂的busybox根文件系统是存放在emmc的第二个分区上的。
出厂的情况:uboot(位于emmc)+linux内核(位于emmc)+linux设备树(位于emmc)+busybox根文件系统(位于emmc) 现在的情况:uboot(位于emmc)+linux内核(位于emmc)+linux设备树(位于emmc)+ubuntu根文件系统(位于sd卡)
请注意给SD卡分好区后,分区根目录必须是root 0755权限: sudo chmod 755 /run/media/XXXXX sudo chown root /run/media/XXXXX sudo chgrp root /run/media/XXXXX 用stat /run/media/XXXXX命令可以看到分区根目录是什么权限。
第四个分区(ext4)就是存放ubuntu根文件系统的分区。 第二个分区(fat)是拿给Windows使用的。为了保证Windows下“我的电脑”里能出现U盘图标,SD卡分好区后必须删除Partition 1变成Free Space,且FAT分区必须是Partition 2。
ubuntu18.04根文件系统的移植过程大体上和ubuntu16.04一样,见 【正点原子】阿尔法Linux开发板(A盘)-基础资料/09、文档教程(非常重要)/【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.6.pdf的第 A3 章 Ubuntu-base 根文件系统构建。
ubuntu18.04根文件系统压缩包的下载地址:http://cdimage.ubuntu.com/ubuntu-base/releases/18.04/release/ 文件名:ubuntu-base-18.04.5-base-armhf.tar.gz
复制qemu的命令:sudo cp /usr/bin/qemu-arm-static usr/bin 安装基础软件包: apt update apt install sudo vim kmod net-tools ethtool ifupdown language-pack-en-base rsyslog htop iputils-ping systemd
不过ubuntu18.04相比ubuntu16.04有点奇怪,他的/sbin文件夹下没有poweroff和reboot命令,而且更重要的是,他没有串口文件/lib/systemd/system/getty@.service! 解决这两个问题的方法是安装systemd软件包:apt install systemd。 安装后就可以复制串口文件了: ln -s /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@ttymxc0.service
做好之后先exit,然后unmount.sh,然后把SD卡从电脑上拔出来,插到板子上,开机。 ubuntu18.04就能正常使用了。进入系统后就会发现,/sbin下是有poweroff和reboot命令的,它们是指向/bin/systemctl的软链接。 oct1158@alientek:~$ ls -l /sbin/poweroff /sbin/reboot lrwxrwxrwx. 1 root root 14 Dec 10 09:15 /sbin/poweroff -> /bin/systemctl lrwxrwxrwx. 1 root root 14 Dec 10 09:15 /sbin/reboot -> /bin/systemctl
一定要确保根目录必须是root 0755权限,所有的系统文件夹和文件也都是root权限!不然肯定出错! 用stat /命令查看根目录的权限:
oct1158@alientek:~$ stat /
File: /
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: b304h/45828d Inode: 2 Links: 20
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-03-05 07:47:32.086845695 +0000
Modify: 2022-03-05 07:46:48.854840247 +0000
Change: 2022-03-05 07:46:48.854840247 +0000
Birth: -
lsb_release -a查看ubuntu版本的命令不存在的解决方法: sudo apt-get install lsb-core
oct1158@alientek:~$ lsb_release -a
LSB Version: core-9.20170808ubuntu1-noarch:security-9.20170808ubuntu1-noarch
Distributor ID: Ubuntu
Description: Ubuntu 18.04.5 LTS
Release: 18.04
Codename: bionic
板子启动ubuntu系统后会发现只能ping通ip地址,ping不通域名,导致apt update失败,这说明是dns地址错了。这是ubuntu18.04特有的问题,16.04没有这个问题。 改一下/etc/resolv.conf里面的dns地址可以暂时解决问题,但是板子重启后问题又会重现。 为了永久解决这个问题,可以禁用systemd-resolved服务: sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved sudo rm -rf /etc/resolv.conf sudo reboot 重启后,/etc/resolv.conf又自动生成了,但里面只有一行:nameserver 192.168.1.1,问题解决。
笔者移植ubuntu18.04的目的就是为了在正点原子的linux板子上跑ros melodic框架。 ros melodic的安装方法见:https://wiki.ros.org/melodic/Installation/Ubuntu 里面比较容易出问题的是1.3 Set up your keys和1.6.1 Initialize rosdep。 解决方法: 首先打开 1.3 Set up your keys 去https://github.com/ros/rosdistro里面把ros.asc下载下来,上传到板子上,然后执行: sudo apt-key add ros.asc 1.6.1 Initialize rosdep 不要去用小鱼的rosdepc,他用的python版本是3.5,安装后会报/usr/local/lib/python3.5/dist-packages/pyparsing/__init__.py major: int的语法错误。 如果真的安装了rosdepc,补救方法是: sudo pip3 uninstall rosdepc sudo pip3 uninstall catkin-pkg docutils pip python-dateutil PyYAML rosdistro rospkg setuptools six wheel 可消除major: int错误。 建议使用https://zhuanlan.zhihu.com/p/397624291里面说的手动下载的方法,还是用rosdep,只不过把网址改了。 由于github被墙,git clone命令也不可靠,最好是去https://github.com/ros/rosdistro里面Download ZIP,把rosdistro-master.zip上传到板子上解压出来,笔者解压的路径是/home/oct1158/rosdistro-master。 vim替换一个文件中所有的网址的命令: :%s/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master\//file:\/\/\/home\/oct1158\/rosdistro-master\/ vim替换某一行里面的网址的命令: :s/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master\//file:\/\/\/home\/oct1158\/rosdistro-master\/ 请注意要修改的第三个文件是__init__.py,前后都是两个下划线,不是一个!不然vim打开是个空文件。
|