更多内容请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com大家好!我是拓维信息的鸿蒙开发者廖永恒。最近在4412开发板上移植了openharmony3.0(标准版)。并显示成功。在这里,我简单分享一下我的移植过程。4412开发板(1G+8G)采用Cortex-A9四核Exynos4412(Exynos4Quad),主频1.4-1.6GHz。GPU采用Mali400MP四核图形处理器,支持2D/3D图形加速。在文章中,我将详细介绍移植解决问题的方向、方法和调试方法。因为我觉得在移植的过程中,会遇到各种各样的问题,一定要懂得分析问题,解决问题。在文章中,我更多的是充当“向导”的角色,同时文章教程也作为移植其他平台芯片的参考。我是一个才学无量的小三,同时,我还是一个鸿蒙小学生。文中有错误和不足之处,望前辈不吝指正。一、我的移植环境参考文章:一种快速移植OpenHarmonyLinux内核的方法1.uboot:随意启动内核。2.kernelkernel:5.8其实kernel并没有什么要求,而且我看到有人也可以用3.我之所以用5.8,是因为我看到4412最新的移植驱动就是这个版本的不错核心。关于内核,采用图中的三方Linux内核方式。3、根文件系统:我直接把3516编译出来的system.img、userdata.img、vendor.img,烧录到mmc分区。updater.img不可烧录。烧录镜像,各个平台不一样,需要想办法烧录成功。3516镜像使用OpenHarmony-v3.0-LTS版本。二、其他移植1、移植上图中oh内核态的基本代码。2.哦内核态特性(如hdf)不能移植,这个不会影响系统的启动和UI界面的显示。3.移植显示触摸驱动。4、重要的移植点是把显示驱动(drm驱动)移植好,dev/dri/下有cardx。我的是card0,你可能会问,那fb驱动呢?能行吗?我没有验证过这个。目前看过几个开发板,都是drm驱动。三、重点配置1、在内核配置中,必须开启IPC,否则系统启动后几个进程处于高占用状态,导致系统卡顿。DeviceDrivers—>Android—>[]AndroidDrivers(打开)[]AndroidBinderIPCDriver(打开)2.内核配置开启SELinuxSupport,否则系统启动会报错,但无法打开,以及它不会影响系统启动或显示问题。3.重新编译内核。四、启动系统1、正确引导内核启动、根文件系统启动。我的bootargs是这样的,“mem=900Mmmz=anonymous,0,0xA8000000,384Mclk_ignore_unusedandroidboot.selinux=permissiveskip_initramfsrootdelay=5init=/initroot=/dev/mmcblk1p2rootfstype=ext4rwblkdevparts=mmcblk1(da9),3075M(system),2048M(userdata),-(vendor)”供参考。2、启动系统后,修改a.system/etc/init.cfg这三个文件。我的修改是这样的。这里是挂载vendor和data分区。根据自己的情况修改。b.system/etc/weston.ini这里是指定要显示的显示设备。c./system/etc/udev/rules.d/touchscreen.rules这里是指定触摸设备。其中TSC2007Touchscreen是我的触摸设备名称。获取方法:cat/proc/bus/input/devices5.测试过程中,如果display和touch驱动都做好了,烧录图像是正常的。重启设备后,可以直接显示和触摸。就这么简单?就这么简单。如果显示不正常,解决方法如下:(1)DRM是否存在dev/dri/cardxx=1,2,3(2)libdrm是否通过了modetest测试。ohos的third_party源代码由libdrm库编译。我的测试方法:自己写测试文件,然后显示各种颜色。测试结果:(3)本目录下BUILD.gn第31行wmtest测试改为true。编译生成wmtest可执行文件。测试命令:测试结果:六、排查原因并解决问题如果以上测试都通过了,但是仍然没有显示系统界面,那么就按照下面的方法查找原因。参考文章:启动recovery子系统概述1.首先查看重要进程是否启用shell命令行输入:ps-A如installs、accountmgr、ueventd、foundation、weston、appspawn、com.ohos.launch、com.ohos.system上图说明系统启动过程,首先初始化init,根据/etc/init.cfg启动ueventd线程,然后如图所示根据/etc/init/.cfg文件启动各个线程。例如:accountmgr、appspawn、系统界面等等。这里演示一下,找到开机动画无法启动的原因。开机动画在graphic.cfg中拉起。一般情况下,在shell中输入bootanimation即可显示开机动画。假设开机界面异常,进入bootanimation&hilog|shell中grepBootAnimation报错,因为找不到引导文件。为什么要grepBootAnimation?因为开机动画源码中指定的日志标签BootAnimation可以过滤不相关的日志。又如com.ohos.systemui进程等所有com开头的进程都没有启动。如何找出造成这种情况的原因有点难下手。我用的是对比法,用一块好的3516开发板做对比。我觉得这些进程跟系统界面有关,想让它重启界面,让它报错。看了文中一句话:“因为所有的应用都需要加载JS运行环境,这涉及到很多准备工作,appspawn作为应用孵化器,可以在foundation中收到应用启动请求时直接孵化应用进程,减少App启动时间。"我试试直接killfoundation进程?因为killfoundation进程重启UI界面,然后shell输入:kill824&hilog>/data/foundation.log其中824是foundation的pid,保存hilog登录/data/foundation,在日志中,对4412开发板和3516开发板做同样的操作,在foundation.log中搜索关键字“E”,找到4412开发板读取失败的地方system/lib/****.so文件3516开发板没有报错最后我把3516开发板的lib库全部复制到4412开发板,重启4412开发板,开始的进程com启动,界面显示正常。一句话:bug多不怕,就怕找不到错误,不怕不正常,就怕没有解决办法和方向。7.其他1.shellaa命令的使用aastart-acom.ohos.photos.MainAbility-bcom.ohos.photosaa启动-acom.ohos.settings。MainAbility-bcom.ohos.settingsaastart-acom.ohos.launcher.MainAbility-bcom.ohos.launcher8、移植过程中还有很多不足:(1)显示屏为4.3寸电阻屏,并且界面显示不全,触摸没有验证,触摸不准确,乱跳。后期会换成大屏电容屏。(2)没有加入openharmony编译框架。(3)没有使用过hdc和hdf框架。前景:会用到上面的不足,正在慢慢完善中。异常问题千千万万,解决的方向和方法才是关键。今天,我将移植的经验分享给各位同仁,凯虹之路会更加顺畅、更加快捷。更多信息请访问:和华为Harmonyos官方技术社区https://harmonyos.51cto.com
