如何实现Linux系统在树莓派上的平滑移植 (linux系统移植 树莓派)

随着物联网技术的不断发展,嵌入式系统的应用越来越广泛,而树莓派作为一款功能强大、价格实惠的嵌入式开发平台,受到了越来越多的开发者和用户的青睐。与此同时,Linux作为一款免费、开源的操作系统,也成为了嵌入式开发的首选。那么如何在树莓派上实现Linux系统的平滑移植呢?本文将介绍具体的实现方法和注意事项。

一、准备工作

在进行Linux系统的移植之前,需要进行一些准备工作,包括准备好树莓派、SD卡、SD卡读卡器、Linux系统镜像、交叉编译器等工具和材料。其中,选择合适的Linux系统镜像非常重要,需要根据自己的需求和实际情况选择合适的发行版,并确保其支持树莓派平台。

二、烧录系统镜像

将Linux系统镜像烧录到SD卡是移植的之一步,这个步骤需要用到SD卡读卡器。具体操作如下:

1.将SD卡插入SD卡读卡器,并插入电脑上的USB接口;

2.打开烧录工具,选择Linux系统镜像,并将其烧录到SD卡上。可以使用dd等命令行工具,也可以使用Win32DiskImager、Etcher等图形界面工具进行烧录。这里以Win32DiskImager为例说明具体操作步骤。

3.打开Win32DiskImager软件,选择要烧录的镜像文件和SD卡所对应的驱动器号,单击“Write”按钮开始烧录。

4.等待镜像烧录完成后,将SD卡从电脑上取出并插入到树莓派的SD卡接口上即可。

三、编译内核

Linux系统的内核是系统的核心,也是最重要的部分之一。在树莓派上进行Linux系统移植时,需要根据实际情况进行对内核的定制和编译,以保证系统的稳定性和性能。具体操作如下:

1.下载内核源码

可以从官网上下载Raspberry Pi的官方内核源码,也可以从Github上下载其他开源内核源码。

2.交叉编译内核

交叉编译是将代码从一种平台编译到另一种平台的过程。在编译Linux内核时,需要使用交叉编译工具链,以保证编译后的内核可以在树莓派上运行。具体操作如下:

a.下载交叉编译工具链

可以从官网上下载Raspberry Pi的官方交叉编译工具链,也可以从其他渠道下载其他的交叉编译工具链。

b.配置环境变量

将交叉编译工具链所在的路径添加到PATH环境变量中即可,具体命令为:

export PATH=$PATH:/path/to/toolchn

c.配置内核

进入内核源码目录,执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig进行内核配置,然后可以执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig等命令进行更详细的配置。

d.编译内核

执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage dtbs等命令,编译内核和设备树文件。

3.安装内核和设备树文件

编译完成后,将编译生成的zImage和设备树文件复制到SD卡中的/boot目录下即可。同时,需要在SD卡中的/boot/config.txt文件中添加以下内容:

kernel=vmlinuz-3.12-1-rpi

device_tree=bcm2708-rpi-b.dtb

其中,vmlinuz-3.12-1-rpi为编译生成的内核文件名,bcm2708-rpi-b.dtb为生成的设备树文件名。

四、FS根目录的制作

除了内核之外,Linux系统中最重要的部分就是文件系统(FS)。在树莓派上进行Linux系统移植时,需要将Filesystem Overlay(FS Overlay)制作成一个tar包,然后解压到SD卡中的根目录下。具体操作如下:

1.制作FS Overlay tar包

可以使用一些工具和脚本自动生成FS Overlay,也可以手动创建。这里以手动创建为例,具体步骤如下:

a.创建空目录

需要创建一个空的目录作为FS Overlay的根目录,例如:

mkdir raspbian

b.复制文件

将从官方下载的树莓派镜像中解压出的根目录下的所有文件复制到这个空目录中即可。

c.压缩文件

使用tar命令将这个目录压缩成一个tar包:

tar czvf raspbian.tar.gz raspbian

2.解压FS Overlay tar包

将制作好的tar包解压到SD卡的根目录下即可。具体命令为:

sudo tar xzf raspbian.tar.gz -C /mnt/rootfs

其中,/mnt/rootfs为SD卡挂载的根目录。

五、启动系统

完成以上步骤后,就可以将SD卡插入到树莓派中,然后连接显示器、鼠标、键盘等外设,启动系统了。如果一切正常,树莓派会自动启动LInux系统,并显示欢迎界面。如果出现问题,可以通过串口等方式查看系统日志来进行排查。

六、注意事项

在树莓派上实现Linux系统的移植并不是一件容易的事情,需要开发者具备一定的Linux系统基础和嵌入式开发经验。除此之外,还需要注意以下几点:

1.选择合适的Linux系统镜像,确保其支持树莓派平台;

2.交叉编译内核时,一定要选对交叉编译工具链,并配置好相关环境变量;

3.制作FS Overlay时,一定要注意文件的拷贝和压缩,以确保文件的完整性和正确性;

4.启动系统时,需要准备好显示器、鼠标、键盘等外设,并确保树莓派已连接到网络。

实现Linux系统的平滑移植需要按照以上步骤进行,并且需要细心认真,遵循一定的规范和原则。如果开发者具备一定的Linux系统和嵌入式开发经验,并秉承着“慢工出细活”的精神,相信一定能够实现完美的树莓派Linux系统移植。

相关问题拓展阅读:

如何在raspberry pi 2上安装系统

就像每一个计算机那样,树莓派需要一个操作系统,更好是选择Linux。选择Linux是因为它免费,而且可支持ARM处理器。但是要注意,并不是所有的

Linux发行版都能运行于树莓派。因为有些Linux发行版不支持树莓派指定的ARM处和空理器。比如你不能在树莓派上安装Ubuntu Linux。

选择操作系统只是之一步,下面你还需要安装它。

把操作系统安装到SD卡上比较麻烦。

本文将安装最新的Debian Linux发行版,整个安装过程与安装其它操作系统差不多。

们需要一个已经安装了的系统快照。因此,必须创建或找到一个Linux发行包,并复制到SD卡上。最简单的方法是从Raspberry项目中下载。你可以

下载Debian wheezy,又或者是Arch Linux ARM,或者是Qton Pi,还有Bodhi

Linux。而且有些牛人开始移植Google的Chrome OS。

Debian wheezy完全支持树莓派的硬件,而且它自带了一套成熟的桌面UI,还有浏览器。另外,它还有一个功能强大的包管理器,可以用它安装更多的软件。下面,我们将学习怎样安装它。

Arch

Linux ARM是一个极简的毕棚含操作系统,它适合那些非常熟悉Linux系统的人。Arch

Linux没有使用多少资源,它有很好的包管理器。因此,如果你想把树莓派当作服务器的话,它是很好的选择。而对于桌面系统,Debian更适合。默认的

Arch Linux没有桌面环境。你必须安装和配置它。

Qton Pi是一个专门的发布包,它打包了Qt框架,对于创建富UI应用非常适合。

初Qt团队听说树莓派后,立即决定创建Qton Pi

Linux发布包。它包含了Qt所有的功能,是极好的Qt应用开发环境。但是,它是跨编译环境的,你必须在PC上安装开发环境。可以在PC上使用Qt

Creator创建应用程序,然后使用SSH把应用转移到树莓派上。

遗憾的是,Qton Pi还没有适合的发布包。

制手笑作可引导的SD卡

1)你需要一个带读卡器的PC,

2)从官方下载页下载Debian映像文件。

下载完成后,PC上将有wheezy-raspbian.zip文件。

3)用专门的工具将映像文件写入到SD卡。

Windows用户可以使用Win32DiskImager软件,Unix用户使用dd工具。

1.安装chromium:

sudo apt-get install chromium

2获取flash player for armv7:

wget

tar -xzf PepperFlash-12.0.0.77-armv7h.tar.gz

cd PepperFlash

chmod +x *

sudo cp * /usr/lib/chromium/plugins

3.添加flash到chromium插件中:

sudo nano /etc/chromium/

修信改段改最后一句为

CHROMIUM_FLAGS=”–ppapi-flash-path=/usr/lib/chromium/plugins/libpepflashplayer.so –ppapi-flash-version=12.0.0.77 -password-store=detect -user-data-dir”

保存

4.进入滑誉chromium输入歼差chrome://plugs查看flash是否添加到插件里,是否开启。

5.完成。

能不能告诉我树莓派与其他的Linux开发板比如正点原子的alpha开发板的区别呢?

对于

开发板

,我玩过很多,感觉没什么太大区别,对于初学者,资料要详细,一般都是交怎么玩,只要学会怎么烧写uboot、内核,怎么编译uboot、内核,怎么搭建开发环境,一般会给

交叉编译

工具链,uboot Linux内核 qt库等源码包,他们都是编译过得,按照步骤来,都完成了大燃,剩下的路就要看自己的了,如果是

应用程序

开发,不用太管硬件和驱动方向,和Windows上面编程差不野仿清多,如果你是玩硬件的,学学linux驱动开发,

linux系统

移植,这颂前些方面手册一般都没有,需要论坛上面找或者相关书籍,我用过ARM9(天嵌的),A8(友善之臂的),H3(友善的),感觉下来,基础资料都差不多,都能教你基本操作,具体选什么方向,还得看自己

在鸿蒙(OHOS.)编译框架中添加树莓派B

之前在树莓派4b上点亮了OHOS3.0,不过内核是用tftp拉取的,根文件系统挂在了NFS上,拔了网线就无法启动。当然这么操作只是为了方便调试,而最终需要的是一个可以烧录到TF卡上的img镜像文件。这就需要将所有调试好的内容添加到OHOS3.0的编译框架,本以为是很简单的事情,好家伙,整了这么久,感觉添加编译框架比移植本身更复杂。于是我整理了添加树莓派单板到编译框架的内容,希望对各位有所帮助,为大家避坑。

主要参考 hisilicon build组件仓,添缓返加一个products编译组件,这个组件是在产品配置文件中指定的。比如

productdefinecommonproductsRPI4B.json

其他部分参考Hi3516,但是其中2条,指定单板组件路径,并添加组件。如果删除这两条,将不能编译内核,只生成OHOS的文件系统。

接下来在device目录下,新建一个raspberrypi编译组件文件夹,并添加 ohos.build 文件。和前面产品配置文件中的设置对应起来了。

deviceraspberrypibuildohos.build

新建 deviceraspberrypibuildBUILD.gn 当然每个厂家不可能只有1个板子,如果有其他单板就在这里指定,比如树莓派2B、3B等

既然前面指定了rpi4b的编译配置组件,那么就在 deviceraspberrypi 新建一个 rpi4b 的目录,可以参考 hi3516dv300 build组件

deviceraspberrypirpi4bBUILD.gn

至此一个rpi4b build组件就添加到OHOS3.0的编译框架了,之后相关内容添加到这个文件夹下就可以了。

接下来分析下目前移植了树莓派4B的哪些内容,如何将这些内容编译进OHOS3.0。

关于补丁可以参考 Patch组件,可以得知内核编译由kernel.mk来执行

kernellinuxbuildkernel.mk

所以补丁文件需要放到正确的路径下,以正确的名字命名就可以蠢中patch到内核。

hdf.patch补丁文件,现在还没有移植HDF相关内容,所以可以先使用Hi3516的

rpi4b.patch补丁文件,使用树莓派的官方带哪山镜像,

kernellinuxconfiglinux-5.10archarmconfigsrpi4b_standard_defconfig

内核配置文件目前已知的需要开启下面内容,但是肯定不止这些,以后会继续更新

Pi4的GPU是VideoCore VI支持OpenGL ES 3.2,而Pi3的GPU是VideoCore IV支持OpenGL ES 2.0。VideoCore IV 驱动程序是 VC4,VideoCore VI 驱动程序的 V3D。内核已经提供驱动,参考rpi4b_standard_defconfig将驱动直接编入到内核。

同时需要在config.txt中开启设置

OHOS中修改weston的配置文件,指定显示驱动

systemetcweston.ini

具体思路就是先查找设备号,根据设备号找到驱动程序。

前面内核配置的时候rpi4b_standard_defconfig中已经将触摸驱动编入内核,所以后面不需要在init加载模块了,修改下eudev的配置文件即可。

third_partyeudevrules.d ouchscreen.rules

正常情况下内核是由uboot进行引导的,而且OHOS默认生成uImage。但是树莓派自带BootLoader,虽然可以先用树莓派自带的BootLoader启动uboot,再用uboot加载uImage,但是这样会比较麻烦,而且会增加启动时间。不过目前 zImage是写死在kernel.mk中的,没办法改下编译脚本把。

kernellinuxbuildkernel.mk 将 uImage 改为 zImage modules dtbs

kernellinuxbuildbuild_kernel.sh

kernellinuxbuildBUILD.gn

kernellinuxbuildkernel_module_build.sh

这里内核编译会依赖product_path=”vendor/$product_company/$product_name”下的hdf.hcs文件,得先新建一个应付下,不然会报下面这个错误。

ninja: error: ‘../../vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs’, needed by ‘gen/drivers/adapter/uhdf2/hcs/hdf_default.hcb’, missing and no known rule to make it

新建:vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs

对于镜像烧录,Hi3516会将uImage、system.img、vendor.img等镜像烧写到emmc,但是树莓派使用TF卡启动,所以需要对TF卡进行分区,然后复制对应的内容到各个分区。首先制作树莓派boot目录,这个用来目录存放树莓派设备树、config.txt、cmdline.txt、内核镜像等信息。写一个简单的mkboot.py脚本来实现这个功能,位置在码仓rpi4bdeviceraspberrypiimagekboot.py将会生成boot.img。

为了方便烧录,需要将boot.img、system.img、updater.img、vendor.img、userdata.img合并成一个rpi4b.img。还是写一个简单的脚本来处理这个步骤rpi4bdeviceraspberrypiimagekboot.py。

不过有个问题,主分区只支持4个,所以updater.img暂时先不合并了,这个问题等以后再来处理。

最后将会得到一个rpi4b.img的镜像文件,将这个文件烧录到SD卡就可以了。

Linux:可以使用dd命令

windows:使用Win32 Disk Imager工具烧录即可。

到这里总算是跑通了一个完整的添加新单板的流程,只不过目前只适配了显示和触摸。接下来打算尝试HDF或者distributed部分。

linux系统移植 树莓派的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux系统移植 树莓派,如何实现Linux系统在树莓派上的平滑移植,如何在raspberry pi 2上安装系统,能不能告诉我树莓派与其他的Linux开发板比如正点原子的alpha开发板的区别呢?,在鸿蒙(OHOS.)编译框架中添加树莓派B的信息别忘了在本站进行查找喔。


数据运维技术 » 如何实现Linux系统在树莓派上的平滑移植 (linux系统移植 树莓派)