移植新设备到kupfer/Porting a new device to kupferbootstrap
准备工作
首先你要拥有:
- linux环境(wsl也可以)
- python环境(用于安装kupferbootstrap)
- 安卓设备
安装kupferbootstrap
参考https://kupfer.gitlab.io/kupferbootstrap/main/install/
-
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.
-
Pick which Kupferbootstrap branch to clone: usually either
main
ordev
-
Clone the repository:
git clone -b INSERT_BRANCHNAME_HERE https://gitlab.com/kupfer/kupferbootstrap
-
Change into the folder:
cd kupferbootstrap
-
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. -
Symlink
kupferbootstrap
into your$PATH
:sudo ln -s "$(pwd)/bin/kupferbootstrap" /usr/local/bin/
-
You should now be able to run
kupferbootstrap --help
!
初始化&配置文件修改
你可以输入kupferbootstrap config init -N
来快速新建一个默认的配置文件,默认位于~/.config/kupfer/kupferbootstrap.toml
生成后可以使用vim编辑toml配置文件,重点注意pkgbuilds
和profiles.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分支)放入如下目录
然后将pmOS的现成deviceinfo放入如下目录
如果需要修改内核编译配置,只需要在linux/sm8250目录中修改sm8250.config即可
编译及刷入
做好准备工作后,即可开始编译
首先需要启动systemd-binfmt
sudo systemctl restart systemd-binfmt
启动后即可通过kupferbootstrap进行镜像的构建
kupferbootstrap image build
当然构建不可能一次性成功,需要根据报错来具体变通。成功后的镜像将会保存在 ~/.cache/kupfer/images
正常需要选择-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
你好厉害