【Linux/Android】移植新安卓设备到kupfer archlinuxarm / Porting a new device to kupfer archlinuxarm

技术 · 2023-05-23 · 2396 人浏览

移植新设备到kupfer/Porting a new device to kupferbootstrap

准备工作

首先你要拥有:

  1. linux环境(wsl也可以)
  2. python环境(用于安装kupferbootstrap)
  3. 安卓设备

安装kupferbootstrap

参考https://kupfer.gitlab.io/kupferbootstrap/main/install/

  1. Install Python 3, Docker, and git.

    On Arch: pacman -S python docker git --needed --noconfirm

    Hint

    After installing Docker you will have to add your user to the docker group:

    sudo usermod -aG docker "$(whoami)"

    Then restart your desktop session for the new group to take effect.

  2. Pick which Kupferbootstrap branch to clone: usually either main or dev
  3. Clone the repository: git clone -b INSERT_BRANCHNAME_HERE https://gitlab.com/kupfer/kupferbootstrap
  4. Change into the folder: cd kupferbootstrap
  5. Install python dependencies: pip3 install -r requirements.txt

    Note

    Most of our python dependencies are available as distro packages on most distros, sadly it’s incomplete on Arch.

    See requirements.txt for the list of required python packages.

  6. Symlink kupferbootstrap into your $PATH: sudo ln -s "$(pwd)/bin/kupferbootstrap" /usr/local/bin/
  7. You should now be able to run kupferbootstrap --help!

初始化&配置文件修改

你可以输入kupferbootstrap config init -N来快速新建一个默认的配置文件,默认位于~/.config/kupfer/kupferbootstrap.toml

生成后可以使用vim编辑toml配置文件,重点注意pkgbuildsprofiles.default这两块。

下面是一份kupferbootstrap.toml的示例

[wrapper]
type = "none"

[build]
ccache = true
clean_mode = true
crosscompile = true
crossdirect = true
threads = 8

[pkgbuilds]
git_repo = "https://gitlab.com/kupfer/packages/pkgbuilds.git"
git_branch = "dev"

[pacman]
parallel_downloads = 4
check_space = false
repo_branch = "dev"

[paths]
cache_dir = "/home/xunflash/.cache/kupfer"
chroots = "%cache_dir%/chroots"
pacman = "%cache_dir%/pacman"
packages = "%cache_dir%/packages"
pkgbuilds = "%cache_dir%/pkgbuilds"
jumpdrive = "%cache_dir%/jumpdrive"
images = "%cache_dir%/images"
ccache = "%cache_dir%/ccache"
rust = "%cache_dir%/rust"

[profiles]
current = "default"

[profiles.default]
parent = ""
device = "sm8250-xiaomi-elish-csot"
flavour = "plasma-desktop"
pkgs_include = ["konsole","vim","git","chromium"]
pkgs_exclude = []
hostname = "kupfer"
username = "kupfer"
password = "1234"
size_extra_mb = "0"

PKGBUILD

PKGBUILD是需要重点工作的对象之一,也是是移植的重点,可以通过浏览https://gitlab.com/kupfer/packages/pkgbuilds中现有的几个PKGBUILD来学习如何编写PKGBUILD,PKGBUILD的编写规范在ArchlinuxWiki中也有。

但是由于个人理解真的很有限,读者可以看其他人的PKGBUILD学习,下面是为骁龙870移植内核的Lujianhua大佬编写的PKGBUILD

https://gitlab.com/jianhua000/pkgbuilds/-/tree/elish/

同样的,postmarketos里面的APKBUILDS,以及页面中的几个链接也可以作为参考。

移植准备

首先可以通过toml配置文件中的path块看到kupfer的pkgbuilds是在%cache_dir%/pkgbuilds这个路径的,进入后可以发现有从指定git repo拉下来的内容。当然移植新设备的时候,肯定是需要在本地新建目录进行工作。可以合理使用git进行版本管理。

我们进入到pkgbuilds目录下,可以发现有很多文件夹,我个人理解,其中device和linux以及firmware需要移植用户进行操作,firmware是驱动文件的目录,linux是内核源码目录,device是设备目录,根据设备名称和芯片代号,创建相应的文件夹,并且复制已有的示例模板或是通过pmos中丰富的设备模板进行复制也应该可以达到效果。

抄作业

以下内容仅仅以Xiaomi Pad 5 Pro为例进行说明,需要说明,这一部分仅仅是拉取别人的PKGBUILD然后进行编译的教程,并不涉及到移植

首先需要克隆lujianhua仓库的PKGBUILDS,随后将linux主线内核源码(sm8250分支)放入如下目录

image-20230523022639192

然后将pmOS的现成deviceinfo放入如下目录

image-20230523024641687

如果需要修改内核编译配置,只需要在linux/sm8250目录中修改sm8250.config即可

编译及刷入

做好准备工作后,即可开始编译

首先需要启动systemd-binfmt

sudo systemctl restart systemd-binfmt

启动后即可通过kupferbootstrap进行镜像的构建

kupferbootstrap image build

当然构建不可能一次性成功,需要根据报错来具体变通。成功后的镜像将会保存在 ~/.cache/kupfer/images

image-20230523025411055

正常需要选择-full.img的后缀刷入机器super分区。

-boot.img还需要进一步处理(参考了kupferbootstrap源码的处理方式)

debugfs sm8250-xiaomi-elish-csot-plasma-desktop-boot.img -R 'dump /aboot.img /tmp/aboot.img'

通过这种方式可以将生成的boot转换为安卓系统的boot镜像

最后通过fastboot工具刷入机器即可

请不要直接刷入小米平板5pro,上述抄作业镜像为双启动定制,若无重新分区,刷入后无法开机!
fastboot flash super D:\path\to\sm8250-xiaomi-elish-csot-plasma-desktop-full.img
fastboot flash boot_a D:\path\to\aboot.img
  1. codgi 2023-06-08

    这篇文章在你的博客首页显示有问题噢:https://www.xunflash.top/archives/2023tiesan.html

    1. Xunflash (作者)  2023-06-14
      @codgi

      目前已经更新好了

    2. Xunflash (作者)  2023-06-14
      @codgi

      确实有些问题

  2. olivia 2023-05-27

    你好厉害

Theme Jasmine by Kent Liao