IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 正点原子阿尔法Linux开发板移植Ubuntu18.04根文件系统问题解决 -> 正文阅读

[系统运维]正点原子阿尔法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打开是个空文件。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:35:20  更:2022-03-06 13:37:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:41:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码