首页 > 其他分享 >OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源

时间:2023-02-07 16:31:32浏览次数:66  
标签:OpenHarmony img boot initrd pmbootstrap postmarketOS 镜像 移植

开篇引言

安卓设备的引导需要boot.img镜像,其中含有内核镜像,设备树,boot配置文件,initrd.img根文件系统镜像,开发板因为是开发用途,系统引导基本没有限制,而成品安卓手机往往有各种限制,我们需要通过刷入postmarketOS进行确认手机是否可以启动第三方系统,从中获取引导启动的相关信息以及文件,并仿照postmarketOS的引导镜像创建我们自己的引导镜像。

1,准备postmarketOS编译环境

参照​​pmbootstrap - postmarketOS​​ 中的 Installation  -- From git 准备编译环境

$ git clone https://git.sr.ht/~postmarketos/pmbootstrap
$ mkdir -p ~/.local/bin
$ ln -s "$PWD/pmbootstrap/pmbootstrap.py" ~/.local/bin/pmbootstrap
$ pmbootstrap --version
1.50.1


2,执行初始化

pmbootstrap init


OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植


或者替换使用镜像源,不然会有网络问题,需要替换两个镜像源地址,postmarketOS镜像,和Alpine Linux镜像

使用以下命令设置设置成清华源进行初始化,也可以根据镜像源列表找自己喜欢的设置

pmbootstrap --mirror-pmOS https://mirrors.tuna.tsinghua.edu.cn/postmarketOS/ --mirror-alpine https://mirrors.tuna.tsinghua.edu.cn/alpine/


postmarketOS镜像源列表:​​postmarketOS // Official postmarketOS Mirrors​

Alpine Linux镜像源列表:​​Mirror health (alpinelinux.org)​

3,编译安卓格式的刷机包

pmbootstrap install --android-recovery-zip

编译时间会比较长,中间会提示创建进入手机系统的新密码

如果中途出现错误,可以重试几次,仍然不行的话删除整个work目录,重新执行初始化再编译刷机包,最终结果如下

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_02


4,导出刷机包

pmbootstrap export


OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_03


执行以下命令找到刷机包位置

cd $(dirname $(readlink /tmp/postmarketOS-export/pmos-*.zip))


OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_04


至此拿到刷机包

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_05


查找资料的时候有参考这篇文章的方案二部分,在此贴出

​手机运行Docker: 从修改内核到刷入原生Linux | yzddMr6's Blog​

5,刷入手机验证并获取芯片控制器名称

音量上+电源开机进入twrp(twrp的安装是搞机必备,网上教程很多,在此不再重复)

​小米(Mi) 6小米(Mi) 6 手机刷 TWRP 方法,刷三方Recovery方法(解决卡米问题)刷机解锁 (onfix.cn)​​​

点击安装

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_06

点击刷机包

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_07

确认刷入

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_08

刷机会出现错误,不用管

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_09

刷完重启,等待一段时间直到显示welcome信息

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_10

输入用户名:user,密码:自己之前设置的,进入系统

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_11


至此确认手机正常运行Linux系统,显示,触摸等正常工作。


6,解包获取移植需要的资料

解包获取的资料:

bootimg.cfg:boot分区配置信息,内核启动参数

config:默认内核编译配置,后续适配内核在此基础进行变更

firmware:启动加载必须的驱动固件文件


右键解压缩pmos-xiaomi-sagit.zip得到pmos-xiaomi-sagit

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_12

同样使用右键解压缩rootfs.tar.gz得到rootfs,在rootfs/boot文件夹拿到boot.img和内核编译的config配置

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_13


安装安卓boot打包解包工具:

sudo apt update
sudo apt install abootimg


把boot.img复制到任意的文件夹,然后使用以下命令解包:

abootimg -x boot.img

得到boot分区配置bootimg.cfg

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_14


查看initrd.img文件格式为gzip压缩文件

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_15

使用gzip解压,发现解压失败,原因为后缀名不支持,我们使用mv命令复制initrd.img为initrd.img.gz,然后使用解压命令就可以成功解压了,解压后原来的initrd.img会被解压出的文件替换掉,这时initrd.img的格式为cpio镜像文件

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_16


使用cpio解压initrd.img镜像


cpio -idmv < initrd.img

得到我们需要的boot阶段所必须的固件firmware,后面要编译进OH的ramdisk镜像中

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_17


7,获取正常启动的log

参考上面手机运行docker那篇文章,用usb连接电脑,设置好驱动

打开命令提示符,使用ssh连接Linux,ip是固定的172.16.42.1


ssh [email protected]


OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_18


输入dmesg打印输出内核log,这个是正常的内核启动log,复制下来保存好以便移植时启动出错或者驱动有问题时方便进行对照

dmesg


OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_19


8,获取设备名,分区信息

连接Linux,输入以下命令获取信息


获取USB控制器名称,后面移植hdc连接程序会用到

ls /sys/class/udc/
a800000.usb


获取存储控制器名称,后面配置分区会用到

ls /sys/devices/platform/soc

暂时判断1da4000.ufshc为存储控制器名称

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_20


重启,进入twrp,输入以下命令进入recovery的shell

adb shell


OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_21


输入以下命令可以交叉确认1da4000.ufshc为存储控制器名称

ls dev/block/platform/soc/


OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_22


获取分区信息

ls -al /dev/block/platform/soc/1da4000.ufshc/by-name/


OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_23

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_24

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_25


手机上勾选挂载vendor分区

OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_26

df -h


OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源_OpenHarmony移植_27

确认vendor分区对应到sde42  -> cust

system分区因为安装pmOS的缘故无法挂载,但是可以确定分区映射关系是,

/dev/block/platform/soc/1da4000.ufshc/by-name/cust   ---> sde42  --->  vendor

/dev/block/platform/soc/1da4000.ufshc/by-name/system   ---> sde43  --->  system

/dev/block/platform/soc/1da4000.ufshc/by-name/userdata   ---> sda17  ---> data


至此移植需要提前准备的信息基本讲完,下篇开始讲解OpenHarmony编译的部分,敬请期待


本文作者:​​Diemit​

​想了解更多关于开源的内容,请访问:​

​51CTO 开源基础软件社区​

​https://ost.51cto.com/#bkwz​


标签:OpenHarmony,img,boot,initrd,pmbootstrap,postmarketOS,镜像,移植
From: https://blog.51cto.com/harmonyos/6041528

相关文章

  • 如何实现OpenHarmony的OTA升级
     OTA简介随着设备系统日新月异,用户如何及时获取系统的更新,体验新版本带来的新的体验,以及提升系统的稳定性和安全性成为了每个厂商都面临的严峻问题。OTA(OvertheAir)......
  • OpenHarmony 小型系统兼容性测试指南
    前言基于OpenHarmony开源代码研发的设备和业务应用满足OpenHarmony开源兼容性定义的技术要求,完成兼容性测试。本文详细介绍基于小型系统兼容性测试过程,指导完成测试。兼容......
  • OpenHarmony开发13
    OpenHarmony开发13安装realterm在下载链接,在不接这个USB硬件的情况下,安装此驱动重启电脑,可以在端口中看到这个设备,说明安装成功拔下USB,用电源跳线连接3.3v......
  • OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性
    (目录)CPU轻量级隔离特性基本概念CPU轻量级隔离特性提供了根据系统负载和用户配置来选择合适的CPU进行动态隔离的能力。内核会将被隔离CPU上的任务和中断迁移到其他合......
  • linux驱动移植-DM9000网卡驱动
    在学习Mini2440裸机程序时,我们介绍过关于DM9000网卡的相关知识,包括电路图、以及DM9000寄存器等信息。具体可以参考Mini2440裸机开发之DM9000。本节对之前已经介绍过的知识......
  • MT8788 android 9.0 sensor 驱动移植
    1.硬件配置打开 MT8788 核心板原理图,配置GYRO(陀螺仪),ALSPS(光感),G-sensor(加速度)的ENIT和GPIO以及I2C,打开vendor\mediatek\proprietary\scripts\dct\DrvGen.......
  • OpenHarmony内核学习[1]--单独编译OpenHarmony标准系统内核
    内核是操作系统的核心,学习掌握OpenHarmony内核对于开发人员至关重要。笔者整理学习OpenHarmony标准系统内核笔记如下:阅读本文大约需要15分钟。(目录)OpenHarmony标准系......
  • 基于STM32使用HAL库手把手移植华为LiteOS系统并使用CMSIS接口API
    基于STM32使用HAL库手把手移植华为LiteOS系统并使用CMSIS接口API目录​​基于STM32使用HAL库手把手移植华为LiteOS系统并使用CMSIS接口API​​​​(一)说明​​​​(二)裸机工程......
  • 交叉编译并移植tslib-1.21和QT4.8.5运行第一个嵌入式Qt程序
    嵌入式linux平台交叉编译并移植QT4.8.5运行第一个嵌入式Qt程序开发环境:ubuntu1404-i686TQ2440开发板(samsungs3c2440)天嵌官方交叉编译器(版本4.3.3)qt-everywhere-opensourc......
  • TQ2440(S3C2440)移植Linux-4.0.1内核全过程
    TQ2440(S3C2440)移植Linux-4.0.1内核全过程文件系统yaffs2下载地址:​​https://yaffs.net/get-yaffs​​​linux内核下载地址:​​https://mirror.bjtu.edu.cn/kernel/linux/......