正点原子阿尔法Linux开发板移植Ubuntu18.04根文件系统问题解决

本文参考资料: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打开是个空文件。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巨大八爪鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值