SailfishOS移植到Redmi 5 Plus的一些记录
移植旗鱼系统到红米5p的过程记录
!!!可以去ホロ 🐺的博客看看更详细的!!!
https://blog.yoitsu.moe/category/sailfish.html
准备工作
- 一台红米5p手机,解锁过并且刷了lineageos
- 有梯子
- 一台内存起码8G的电脑(4G也可以),Ubuntu 系统,硬盘起码40GB大小,或者更高。
- SailfishOS-HardwareAdaptationDevelopmentKit 1 READ部分pdf文档
https://wiki.merproject.org/wiki/Adaptations/faq-hadkhttps://github.com/mer-hybris/hadk-faq (2019-10-28更新)- 最关键的,一颗善于折腾的心和善于搜索的你
- irc日志 https://irclogs.sailfishos.org/logs/%23sailfishos-porters/
搭建环境
Android编译环境(HADK 第4章)
需要先配置一下hadk的环境变量,一共三个文件,可以参考这里: https://github.com/CancroSailors/sailfish-build-environment
然后source ~/.hadk.env
一下
1. 安装git等
sudo apt-get install git
2. 同步CM的代码
配置git的用户名跟邮箱,填自己的就行,随便填也行
1 | git config --global user.name "Your Name" |
创建检出代码的目录,所在的盘空间要足够
1 | sudo mkdir -p $ANDROID_ROOT |
配置你的设备的仓库,这里是vince
1 | mkdir $ANDROID_ROOT/.repo/local_manifests |
同步代码
repo sync --fetch-submodules
如果你要求快,可以用 repo sync --fetch-submodules -c --no-tags --no-clone-bundle
,这样只会拉取当前要用的代码,但是不方便后面的修改提交
出错就多同步几次
Mer编译环境
参见官方教程: https://sailfishos.org/wiki/Platform_SDK_Installation
安装Platform SDK
1 | export PLATFORM_SDK_ROOT=/srv/mer |
另开一个终端,输入sfossdk
,进入mer下
安装targets,官方教程:https://sailfishos.org/wiki/Platform_SDK_Target_Installation
其实就是执行下面的命令,要下载这两个包,过程有些慢
(2019-06-13更新,修复链接地址为最新的)
1 | sdk-assistant create xiaomi-vince-latest http://releases.sailfishos.org/sdk/targets/Sailfish_OS-latest-Sailfish_SDK_Tooling-i486.tar.7z |
更新到最新(Update to latest)1
2
3sudo ssu re x.y.z.ab
sudo zypper ref
sudo zypper dup
安装打包的工具
1 | sudo zypper in android-tools createrepo_c |
修改fixup-mountpoints
文件在hybris/hybris-boot/fixup-mountpoints
,添加你的设备的,这里是vince。
adb到手机上,输入ls -l /dev/block/platform/*/by-name/
, 获取分区信息,或者其他路径的,HADK里面有写
Camera支持
1 | cd $ANDROID_ROOT/external/droidmedia |
编译hybris-hal
1 | cd $ANDROID_ROOT |
期间可能会报错,谷歌搜一下
验证Kernel
1 | cd $ANDROID_ROOT |
出现WARNING或者ERROR,将提示的加入到你的defconfig中,我的在kernel/xiaomi/vince/arch/arm64/configs/vince_defconfig
中
然后执行make hybris-root
后重新验证。没有出现ERROR
后可以执行make hybris-recovery
打包dhd(HADK 第7章)
再开一个终端(我们这里称终端2),输入sfossdk
,进入mer打包环境下
1 | cd $ANDROID_ROOT |
打包droidmedia与audioflingerglue
> 如果你的机器是32位的话那么下面的命令去掉_32
,下面的也一样
在终端1中1
make -j$(nproc --all) $(external/droidmedia/detect_build_targets.sh $PORT_ARCH $(gettargetarch))
在终端2中
1 | DROIDMEDIA_VERSION=$(git --git-dir external/droidmedia/.git describe --tags | sed \ |
在终端1中
1 | make -j$(nproc --all) $(external/audioflingerglue/detect_build_targets.sh $PORT_ARCH $(gettargetarch)) |
在终端2中1
2
3
4
5
6
7
8
9
10AUDIOFLINGERGLUE_VERSION=$(git --git-dir external/audioflingerglue/.git describe --tags | sed \
-r "s/\-/\+/g")
rpm/dhd/helpers/pack_source_audioflingerglue-localbuild.sh $AUDIOFLINGERGLUE_VERSION
mkdir -p hybris/mw/audioflingerglue-localbuild/rpm
cp rpm/dhd/helpers/audioflingerglue-localbuild.spec \
hybris/mw/audioflingerglue-localbuild/rpm/audioflingerglue.spec
sed -ie "s/0.0.0/$AUDIOFLINGERGLUE_VERSION/" \
hybris/mw/audioflingerglue-localbuild/rpm/audioflingerglue.spec
mv hybris/mw/audioflingerglue-$AUDIOFLINGERGLUE_VERSION.tgz hybris/mw/audioflingerglue-localbuild
rpm/dhd/helpers/build_packages.sh --build=hybris/mw/audioflingerglue-localbuild
然后重新打包dhd1
rpm/dhd/helpers/build_packages.sh --droid-hal
打包其他中间件包(mw)
注意到 https://wiki.merproject.org/wiki/Adaptations/faq-hadk 搜索当前版本需要对应的mw版本号,不一定用最新的
执行 rpm/dhd/helpers/build_packages.sh --mw
,然后选择 all
即可
【进阶】上传到obs打包
将droid-local-repo/vince下 droid-hal-vince/.rpm 跟audioflingerglue.rpm 、 droidmedia*.rpm 上传到obs的droid-hal-vince下
例如这些包:https://build.merproject.org/package/show/nemo:devel:hw:xiaomi:vince/droid-hal-vince
obs打包还需要dhc,dhv等等几个包,此处不详细说明了,可以到 https://github.com/mer-hybris 看其他机型的
打包dhv
也就是 droid-hal-$DEVICE-version
rpm/dhd/helpers/build_packages.sh -v
如果提示 droid-configs 之类的找不到,需要手动安装
1 | sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -R -msdk-install zypper -n install droid-config-$DEVICE |
Jolla-@RELEASE@-$DEVICE-@[email protected]
~obs打包完之后,将droid-config-vince-kickstart-configuration-0.2.4*.armv7hl.rpm 下载下来,解压获得Jolla-@RELEASE@-$DEVICE-@[email protected]放到$ANDROID_ROOT下面~
1 | cd $ANDROID_ROOT |
镜像制作
1 | cd $ANDROID_ROOT |
在当前目录下会有一个 sfe-$DEVICE-$RELEASE$EXTRA_NAME
目录,下面的 sailfishos-$DEVICE-$RELEASE$EXTRA_NAME.zip
就是要使用的刷机包
刷机
刷入 lineageos-14.1的包,刷入上面的sailfishos-$DEVICE-$RELEASE$EXTRA_NAME.zip
的包,重启
可以参考 https://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_Vince
调试
欢迎加入 IRC #jolla-cn #sailfishos-porters (只限英文交流) 或 https://t.me/joinchat/GTqoL1HLIYXWNf-JeijTAg 讨论
相关文档