0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何添加树莓派单板到编译框架

OpenHarmony技术社区 来源:HarmonyOS技术社区 作者:HarmonyOS技术社区 2022-01-04 14:44 次阅读

之前在树莓派 4b 上点亮了 OHOS3.0,不过内核是用 tftp 拉取的,根文件系统挂在了 NFS 上,拔了网线就无法启动。

当然这么操作只是为了方便调试,而最终需要的是一个可以烧录到 TF 卡上的 img 镜像文件。

这就需要将所有调试好的内容添加到 OHOS3.0 的编译框架,本以为是很简单的事情,好家伙,整了这么久,感觉添加编译框架比移植本身更复杂。

于是我整理了添加树莓派单板到编译框架的内容,希望对各位有所帮助,为大家避坑。

添加编译配置文件和 gn

①添加 RPI4B.json

主要参考 hisilicon build 组件仓:

https://gitee.com/openharmony/device_hisilicon_build

添加一个 products 编译组件,这个组件是在产品配置文件中指定的。比如:

productdefinecommonproductsRPI4B.json
其他部分参考 Hi3516,但是其中 2 条,指定单板组件路径,并添加组件。如果删除这两条,将不能编译内核,只生成 OHOS 的文件系统。
.....
"product_build_path":"device/raspberrypi/build",
"parts":{
......
"raspberrypi_products:raspberrypi_products":{},
......
}

②添加ohos.build

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

device aspberrypiuildohos.build:

{
"subsystem":"raspberrypi_products",
"parts":{
"raspberrypi_products":{
"module_list":[
"//device/raspberrypi/build:products_group"
]
}
}
}

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

import("//build/ohos.gni")

device_type="rpi4b"
group("products_group"){
deps+=[
"//device/raspberrypi/rpi4b:rpi4b_group"
]
}

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

https://gitee.com/openharmony/device_hisilicon_hi3516dv300

device aspberrypi pi4bBUILD.gn:

import("//build/ohos.gni")

print("rpi4b_groupin")
group("rpi4b_group"){
deps=[
"build/rootfs:init_configs",
"//kernel/linux/build:linux_kernel"
]
}

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

树莓派内核相关

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

①raspberrypi 内核补丁文件

关于补丁可以参考 Patch 组件:

https://gitee.com/openharmony/kernel_linux_patches

可以得知内核编译由 kernel.mk 来执行。

kernellinuxuildkernel.mk:

DEVICE_PATCH_DIR:=$(OHOS_BUILD_HOME)/kernel/linux/patches/${KERNEL_VERSION}/$(DEVICE_NAME)_patch
DEVICE_PATCH_FILE:=$(DEVICE_PATCH_DIR)/$(DEVICE_NAME).patch
......
$(KERNEL_IMAGE_FILE):
$(hide)echo"buildkernel..."
$(hide)rm-rf$(KERNEL_SRC_TMP_PATH);mkdir-p$(KERNEL_SRC_TMP_PATH);cp-arfL$(KERNEL_SRC_PATH)/*$(KERNEL_SRC_TMP_PATH)/
$(hide)cd$(KERNEL_SRC_TMP_PATH)&&patch-p1< $(HDF_PATCH_FILE) && patch -p1 < $(DEVICE_PATCH_FILE)
ifneq ($(findstring $(BUILD_TYPE), small),)
    $(hide) cd $(KERNEL_SRC_TMP_PATH) && patch -p1 < $(SMALL_PATCH_FILE)
endif

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

hdf.patch 补丁文件,现在还没有移植 HDF 相关内容,所以可以先使用 Hi3516 的 rpi4b.patch 补丁文件,使用树莓派的官方镜像:

https://github.com/raspberrypi/linux

kernellinuxpatcheslinux-5.10rpi4b_patchhdf.patch
kernellinuxpatcheslinux-5.10rpi4b_patchrpi4b.patch

②内核编译配置文件

kernellinuxconfiglinux-5.10archarmconfigsrpi4b_standard_defconfig

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

~/ohos/kernel/linux/config/linux-5.10/arch/arm/configs/rpi4b_standard_defconfig
#####################################################################################
>Securityoptions
>(32768)LowaddressspaceforLSMtoprotectfromuserallocation

[*]NSASELinuxSupport#(选中)
[*]NSASELinuxbootparameter#(选中)
[]NSASELinuxruntimedisable
[*]NSASELinuxDevelopmentSupport
[*]NSASELinuxAVCStatistics
(1)NSASELinuxcheckreqprotdefaultvalue#(设置为1)
(9)NSASELinuxsidtabhashtablesize
(256)NSASELinuxSIDtocontextstringtranslationcachesize
Firstlegacy'majorLSM'tobeinitialized(SELinux)--->#(选中)SELinux
OrderedlistofenabledLSMs#(填入:"lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf")
#####################################################################################
>DeviceDrivers
>Android
[*]AndroidDrivers#(开启)
[*]AndroidBinderIPCDriver#(开启)
#####################################################################################
>DeviceDrivers
>Soundcardsupport
<*>AdvancedLinuxSoundArchitecture#(选中,直接编进内核)
<*>ALSAforSoCaudiosupport#(选中,直接编进内核)
>DeviceDrivers
>Graphicssupport
<*>DirectRenderingManager(XFree864.1.0andhigherDRIsupport)#(选中,直接编进内核)
<*>BroadcomV3D3.xandnewer#(选中,直接编进内核)
<*>BroadcomVC4Graphics#(选中,这个依赖前面的声卡设置,不然是无法编入内核的)
#####################################################################################
>DeviceDrivers
>Inputdevicesupport
>Touchscreens
<*>RaspberryPi'sfirmwarebasetouchscreensupport#(选中,直接编进内核)

驱动适配

①显示配置

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 中开启设置:

dtoverlay=vc4-fkms-v3d

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

systemetcweston.ini:

[output]
name=card0

②触摸配置

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

ls-l/sys/dev/char/|grepinput#查看input下的触摸设备的主次设备号
cat/sys/dev/char/13:64/device/uevent#然后输入主次设备号,查看设备的驱动程序
PRODUCT=19/0/0/0
NAME="raspberrypi-ts"
PROP=2
EV=b
KEY=4000000000000
ABS=26080003
MODALIAS=input:b0019v0000p0000e0000-e0,1,3,k14A,ra0,1,2F,35,36,39,mlsfw

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

third_partyeudev ules.d ouchscreen.rules:

ATTRS{name}=="raspberrypi-ts",ENV{ID_INPUT}="1",ENV{ID_INPUT_TOUCHSCREEN}="1"
ATTRS{name}=="VSoCkeyboard",ENV{ID_INPUT}="1",ENV{ID_INPUT_KEYBOARD}="1"
DRIVERS=="hid-multitouch",ENV{ID_INPUT}="1",ENV{ID_INPUT_TOUCHSCREEN}="1"

制作镜像文件

①修改内核编译脚本

正常情况下内核是由 uboot 进行引导的,而且 OHOS 默认生成 uImage。

但是树莓派自带 BootLoader,虽然可以先用树莓派自带的 BootLoader 启动 uboot,再用 uboot 加载 uImage,但是这样会比较麻烦,而且会增加启动时间。不过目前 zImage 是写死在 kernel.mk 中的,没办法改下编译脚本。

kernellinuxuildkernel.mk 将 uImage 改为 zImage modules dtbs:

$(hide)$(KERNEL_MAKE)-C$(KERNEL_SRC_TMP_PATH)ARCH=$(KERNEL_ARCH)$(KERNEL_CROSS_COMPILE)-j64zImage

kernellinuxuilduild_kernel.sh:

-cp${2}/kernel/src_tmp/${8}/arch/arm/boot/uImage${3}/uImage
+cp${2}/kernel/src_tmp/${8}/arch/arm/boot/zImage${3}/zImage

kernellinuxuildBUILD.gn:

-outputs=["$root_build_dir/packages/phone/images/uImage"]
+outputs=["$root_build_dir/packages/phone/images/zImage"]

kernellinuxuildkernel_module_build.sh:

-LINUX_KERNEL_UIMAGE_FILE=${LINUX_KERNEL_OUT}/arch/arm/boot/uImage
+LINUX_KERNEL_UIMAGE_FILE=${LINUX_KERNEL_OUT}/arch/arm/boot/zImage

这里内核编译会依赖 product_path="vendor/product_company/product

company/product_name"下的 hdf.hcs 文件,得先新建一个应付下,不然会报下面这个错误。

ninja:error:‘…/…/vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs’,neededby‘gen/drivers/adapter/uhdf2/hcs/hdf_default.hcb’,missingandnoknownruletomakeit
新建:vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs
root{
module="default";
}

②制作树莓派 boot 目录

对于镜像烧录,Hi3516 会将 uImage、system.img、vendor.img 等镜像烧写到 emmc,但是树莓派使用 TF 卡启动,所以需要对 TF 卡进行分区,然后复制对应的内容到各个分区。

首先制作树莓派 boot 目录,这个用来目录存放树莓派设备树、config.txt、cmdline.txt、内核镜像等信息

写一个简单的 mkboot.py 脚本来实现这个功能,位置在码仓 rpi4bdevice aspberrypiimagesmkboot.py 将会生成 boot.img。

为了方便烧录,需要将 boot.img、system.img、updater.img、vendor.img、userdata.img 合并成一个 rpi4b.img。

还是写一个简单的脚本来处理这个步骤 rpi4bdevice aspberrypiimagesmkboot.py。

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

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

Linux:可以使用 dd 命令。windows:使用Win32 Disk Imager工具烧录即可。

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

原文标题:添加树莓派4B到OHOS3.0编译框架

文章出处:【微信公众号:HarmonyOS技术社区】欢迎添加关注!文章转载请注明出处。

审核编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208872
  • 编译
    +关注

    关注

    0

    文章

    652

    浏览量

    32800
  • 树莓派
    +关注

    关注

    116

    文章

    1697

    浏览量

    105502

原文标题:添加树莓派4B到OHOS3.0编译框架

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    树莓的MATLAB Server编译安装与LED控制

    执行对应的任务。因此不必少些matlab提供的镜像文件,在现有的树莓linux系统编译安装matlabd即可。首先需要安装树莓的user
    发表于 11-29 14:24

    树莓MCC118

    on Top),用于市场上最流行的单板计算机树莓(Raspberry Pi)HAT是种附加板,带有40W GPIO(通用输入/输出)连接器,符合Raspberry PiHAT规范。MCC 118 HAT
    发表于 01-21 09:22

    树莓首次开机步骤总结

    树莓开机一直都是一个头大的问题对于我这种吃土党,徒有一块单板树莓,也没有显示屏,这板子该这么用呢?今天我就来记录一波
    发表于 01-18 07:20

    树莓装机教程

    树莓装机教程树莓装机教程树莓装机教程树莓
    发表于 11-25 10:14 52次下载

    树莓gpio应用

    树莓现在越来越火,网上树莓的资料也越来越多。树莓源自英国,国外嵌入式开源领域具有良好的分享
    发表于 11-09 15:10 4186次阅读

    Fedora项目团队宣布添加树莓2和3的系统支持

    适配者早已经注意Fedora 24中对树莓的支持,不过当时系统各个方面还不够完善因此没有正式发布。为了提升易用性我们还需要在很多细节方面进行调试和修改。”从今天开始,树莓
    发表于 04-02 14:44 237次阅读

    树莓是什么树莓的简单介绍

    要想玩转树莓,首先得知道树莓是什么。在本节中,作者将带领大家揭开树莓的神秘面纱,了解
    发表于 05-15 18:09 30次下载
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>是什么<b class='flag-5'>树莓</b><b class='flag-5'>派</b>的简单介绍

    使用树莓设计智能小车代码上传及编译方法教程免费下载

    本文档的主要内容详细介绍的是使用树莓设计智能小车代码上传及编译方法教程免费下载
    发表于 06-24 08:00 19次下载

    2012年推出,树莓单板电脑销售量达三千万台

    近日,Raspberry Pi 基金会 CEO Eben Upton宣布,上周某个时候(应该是周二),他们卖出了第三千万个树莓单板电脑 。
    的头像 发表于 12-16 14:26 3437次阅读

    树莓添加一个开、关机按键(原创)

    树莓添加一个开、关机按键(原创)声明关键词问题起因解决方案一、实现方式二、实现原理三、改进方案声明本文由晓宇(xiaoyu_ebox)原创,转载及引用内容请注明出处,并标明本站网址。文中程序仅供
    发表于 10-22 10:06 8次下载
    给<b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>添加</b>一个开、关机按键(原创)

    贸泽现已开售运行速度远超前代产品的树莓5单板计算机

    2023 年 11 月 2 日 – 新型电子元器件与工业自动化产品的全球授权代理商贸泽电子 (Mouser Electronics) 即日起开售Raspberry Pi的树莓5单板计算机。在
    发表于 11-06 16:14 603次阅读

    树莓装ubuntu和raspbian哪个更好

    树莓(Raspberry Pi)是一款由英国树莓基金会开发的单板计算机,广泛应用于教育、科研、物联网等领域。
    的头像 发表于 08-30 15:41 1032次阅读

    树莓的功能用途是什么

    树莓(Raspberry Pi)是一款由英国树莓基金会研发的信用卡大小的单板计算机,自2012年推出以来,已经发展出多个型号和版本。
    的头像 发表于 08-30 18:01 2209次阅读

    树莓gpio有什么用,树莓gpio接口及编程方法

    一、树莓GPIO的用途 树莓(Raspberry Pi)是一款小巧、功能强大的单板计算机,广泛应用于编程教育、物联网项目、家庭媒体中心等
    的头像 发表于 10-22 18:09 447次阅读

    树莓与其他单板计算机的比较

    在当今的科技世界中,单板计算机(SBC)因其小巧、灵活和成本效益而成为教育、业余爱好者和专业开发者的热门选择。树莓作为这一领域的先驱,已经推出了多个版本,但市场上还有其他竞争对手,如
    的头像 发表于 11-11 11:18 287次阅读