如何移植操作系统

记得有一次周末下午坐在电脑前,面对一堆凌乱的代码和硬件手册。
这是我第一次尝试将 Linux 系统移植到较旧的 ARM 处理器。
我选择ARM Cortex-M架构,因为它功耗低,适合嵌入式设备。
我花了几个小时安装交叉编译工具链并设置根文件系统。
写设备树是我最头疼的事情。
我查阅了硬件手册并输入了一堆有关该节点的信息。
我感觉我正在与硬件交谈。

配置内核和编译驱动是我最自豪的时刻。
我通过 makemenuconfig 削减了内核功能,删除了不必要的模块并减小了内核大小。
我还为UART芯片编写了一个字符设备驱动程序。
这个过程虽然繁琐,但却充满成果。

移植完成后,我尝试启动系统,屏幕上出现了熟悉的Linux登录界面。
那一刻我感觉我的努力都实现了。
等等,我突然想到,如果我能早点想出那个设备树写入技巧的话,也许我就不会这么头疼了。
时间:2 02 1 年1 0月;地点:我的工作室。

如何在ARM架构设备上安装Linux_ARM版Linux发行版选择与安装

说实话,我在 ARM 设备上安装 Linux 的过程中实际上遇到了很多陷阱。
以我的旧 Raspberry Pi 3 B+ 为例。
第一次装系统的时候差点就坏了。
以下的经验都是我通过自己的努力积累起来的。
他们可能有点极端,但他们是完全现实的。

我们先来谈谈设备的设计和架构。
我买了一块Rockchip平台开发板,完全忘了检查架构。
结果我直接下载了Ubuntu的arm6 4 镜像,结果开机就蓝屏了。
后来我才知道,这个标志显然是来自armhf。
所以记住,记得使用 uname -m 或设备文档来确认,不要像我一样愚蠢,跟着你的直觉走。
armv7 l 和 aarch6 4 有很大不同。

关于发行版的选择,我建议新手直接使用Raspberry Pi OS,以减少后顾之忧。
但如果你参与开发,Ubuntu for ARM 或 Debian for ARM 可能更适合。
为了安装最新的 Python 包,我选择了 Fedora ARM。
结果每天系统都更新到半夜,导致我严重睡眠不足。
说白了,选择经销商就像选择老婆一样,只看你自己的需求。

在存储介质方面不要贪图便宜。
我早期购买的 Class6 microSD 卡在 Raspberry Pi 上运行就像拖拉机一样。
然后我换了高速卡,系统的响应速度立刻快了三倍。
请记住,您必须使用工具来编写图像,而不是自己拖放文件。
我尝试直接拉到SD卡上,但是文件系统崩溃了,差点烧了板子。

安装过程中最烦人的就是驱动问题。
我之前在 OrangePi 上安装了 Armbian,但由于使用了错误的内核,Wi-Fi 无法工作。
在搜索制造商的文档后,我找到了正确的驱动程序包。
因此请记住,ARM 设备驱动程序就像 Windows 补丁一样,应该与硬件模型紧密匹配。

最后,我们来说说一个有趣的活动。
如果启动过程卡在Logo界面,请不要惊慌。
该图像很有可能是错误的。
我尝试用酒精擦拭SD卡,然后再次写入,它成功了。
还有一个串行端口调试功能,当监视器不可用时,这是一个救星。
由于 GPU 驱动程序问题,我的 Jetson Nano 出现黑屏。
通过串口看到一系列错误,最后更改配置修复了。

现在在 ARM 设备上安装 Linux 对我来说很容易,但每次遇到新设备时,我都必须仔细检查信息。
这个领域变化如此之快。
例如,像 NVIDIA Jetson 这样的设备现在比 iPhone 拥有更频繁的内核更新。
因此,在安装系统时,不必着急,而是要一步一步来。

arm安装linux发行版arm安装linux

不幸的是,我在将Golang编译到ARM平台时实际上经历了很多陷阱。
我记得那一年我在Raspberry Pi上安装了Go语言。
当时Go只有1 .4 .1 版本,相当新。
当时我错误地以为只要下载二进制包就可以使用,但是我发现ARM平台上没有这个选项。

然后我必须手动编译它,这个过程真的很烦人。
首先我必须配置编译工具gcc。
在 Raspberry Pi 上,我使用 sudo apt-get install gcc libc6 -dev。
该命令在基于 Debian 的系统上运行良好。
Raspberry Pi 的 Raspbian 基于 Debian,所以运行起来非常流畅。

之后我花了大半天时间下载Go语言的源码。
官网有压缩包,不过我更喜欢用git,更新起来更方便。
我当时在中国大陆,所以无法直接使用 git clone 访问该链接。
终于在GitHub上找到了对应的仓库。

设置环境变量的时候,确实让我头疼了好久。
GOROOT、GOOS、GOARCH、GOARM 等变量必须依次设置。
当时我在$HOME/.bashrc中来回更改。
设置好GOROOT后,我设置了GOOS和GOARCH。
最终 GOARM 不得不效仿。

编译时,我选择make.bash。
我不想测试所以直接编译。
Raspberry Pi B 型处理器需要很长时间来编译。
我记得花了一个半小时。
编译完成后,我要把bin目录的路径添加到PATH环境变量中,这样才能正常运行。

说到这里,我尝试在/etc/profile中设置环境变量,但发现它们只有在shell启动时才会生效。
所以最后我把它放在.bashrc中以方便使用。

至于ARM处理器是否可以在Linux系统上使用,我从来没有真正考虑过。
然后我又想,现在不是有很多Android手机都采用ARM处理器吗? ARM 处理器当然可以与 Linux 系统一起使用,但不同的 Linux 发行版可能需要不同版本的 ARM。

至于在Windows上编译ARM程序,我以前没有做过,但是仔细一想,Windows是不能直接运行ARM程序的,除非你使用虚拟机安装一个Linux环境并在里面编译。
我尝试过这个方法,虽然比较麻烦,但是有效。

我的嘴很干。
您有任何具体问题吗?我可以在这里继续深入讨论。