• 版块
    • 热门
    • 最新
    • 标签
    • 关于
    • 捐赠
    • 注册
    • 登录

    红米5Plus 构建SailfishOSV4.2.0.21镜像过程记录

    已定时 已固定 已锁定 已移动 教程
    4 帖子 3 发布者 1.2k 浏览
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
      回复
      • 在新帖中回复
      登录后回复
      此主题已被删除。只有拥有主题管理权限的用户可以查看。
      • S 离线
        sandylaw
        最后由 编辑

        红米5Plus 构建SailfishOSV4.2.0.21镜像过程记录

        参考文档

        首先阅读:SailfishOS移植到Redmi 5Plus的一些记录
        刷机参考: https://forum.xda-developers.com/t/sailfish-os-for-the-xiaomi-redmi-note-5-5-plus-vince.3789021/
        其他参考:

        • https://sailfishos.org/develop/hadk/
        • https://github.com/mer-hybris/hadk-faq/
        • http://collabedit.com/kr9xx
        • https://blog.yoitsu.moe/category/sailfish.html
        • google: message site:https://irclogs.sailfishos.org/

        安装SDK

        参考脚本:vince_set_HADK.sh

        #!/bin/bash
        export DEVICE="vince"
        export PATH=$HOME/bin:$HOME/.local/bin:$PATH
        #这里都放在了家目录,请自行修改
        export ANDROID_ROOT="$HOME/Sailfish/$DEVICE/src"
        export PLATFORM_SDK_ROOT="$HOME/Sailfish/$DEVICE/mer"
        #export AOSP_MIRROR="10.20.15.143"
        
        #error: RPC failed; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated.
        #解决方法
        sudo apt install -y git gnutls-bin
        git config --global core.compression -1
        git config --global http.postBuffer 1048576000
        
        git config --global color.ui "auto"
        git config --global user.name "Your Name"
        git config --global user.email "[email protected]"
        
        mkdir -p ~/bin
        echo Installing repo
        if ! curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo; then
            curl -sSL 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' | base64 -d > ~/bin/repo
        fi
        
        sed -ri 's:#!/usr/bin/env python$:#!/usr/bin/env python3:' ~/bin/repo
        #使用内网镜像
        #sed -ri "s;[ ]+REPO_URL =.*$;\ \ REPO_URL = \'git://${AOSP_MIRROR}/tools/repo.git\';" ~/bin/repo
        
        chmod +x ~/bin/repo
        
        #sudo rm -rf "$ANDROID_ROOT"
        sudo rm -rf "$PLATFORM_SDK_ROOT"
        sudo mkdir -p "$PLATFORM_SDK_ROOT"/{targets,toolings,sdks/sfossdk}
        sudo chown $USER:$USER "$PLATFORM_SDK_ROOT"
        sudo chown $USER:$USER "$HOME/Sailfish/$DEVICE"
        sudo ln -sf "$PLATFORM_SDK_ROOT"/sdks/sfossdk/"$PLATFORM_SDK_ROOT"/sdks/ubuntu/ "$PLATFORM_SDK_ROOT"/sdks/ubuntu
        cd && curl -k -O http://releases.sailfishos.org/sdk/installers/latest/Jolla-latest-SailfishOS_Platform_SDK_Chroot-i486.tar.bz2
        sync
        sudo tar --numeric-owner -p -xjf Jolla-latest-SailfishOS_Platform_SDK_Chroot-i486.tar.bz2 -C "$PLATFORM_SDK_ROOT"/sdks/sfossdk
        mkdir -p "$ANDROID_ROOT"
        sudo sed -ri 's/4096/65535/' "$PLATFORM_SDK_ROOT"/sdks/sfossdk/etc/security/limits.d/95-nproc-sdk.conf
        sudo sed -ri 's/2048/65535/' "$PLATFORM_SDK_ROOT"/sdks/sfossdk/etc/security/limits.d/95-nproc-sdk.conf
        "$PLATFORM_SDK_ROOT"/sdks/sfossdk/mer-sdk-chroot sudo zypper ref -f
        "$PLATFORM_SDK_ROOT"/sdks/sfossdk/mer-sdk-chroot sudo zypper dup -y
        "$PLATFORM_SDK_ROOT"/sdks/sfossdk/mer-sdk-chroot sudo zypper --non-interactive in bc pigz atruncate android-tools-hadk kmod zip
        "$PLATFORM_SDK_ROOT"/sdks/sfossdk/mer-sdk-chroot
        
        

        配置环境变量dotfile

        • HOST: [HOST] 主机环境 ,配置文件 ~/.bashrc
        • PLATFORM_SDK: [PLATFORM] Platform 构建环境 ,配置文件~/.hadk.env ~/.mersdk.profile
        • HABUILD_SDK: [HABUILD] Ubuntu Chroot 环境,配置文件~/.mersdkubu.profile

        参考脚本:vince_init_sdk_dotfile.sh

        #!/bin/bash
        sed -ri '/export PATH\=\$HOME\/bin/d' "$HOME"/.bashrc
        sed -ri '/export DEVICE=/d' "$HOME"/.bashrc
        sed -ri '/PLATFORM_SDK_ROOT/d' "$HOME"/.bashrc
        sed -ri '/ANDROID_ROOT/d' "$HOME"/.bashrc
        sed -ri '/sfossdk/d' "$HOME"/.bashrc
        cat << EOF | tee -a "$HOME"/.bashrc
        export DEVICE="vince"
        export PATH=\$HOME/bin:\$HOME/.local/bin:\$PATH
        export ANDROID_ROOT="\$HOME/Sailfish/\$DEVICE/src"
        export PLATFORM_SDK_ROOT="\$HOME/Sailfish/\$DEVICE/mer"
        alias sfossdk="\$PLATFORM_SDK_ROOT/sdks/sfossdk/mer-sdk-chroot"
        EOF
        
        cat << 'EOF' | tee "$HOME"/.hadk.env
        export VENDOR="xiaomi"
        export DEVICE="vince"
        export PORT_ARCH="armv7hl"
        export HYBRIS_BRANCH="hybris-14.1"
        export UBUNTU_CHROOT=$PLATFORM_SDK_ROOT/sdks/ubuntu
        export TMPDIR=$UBUNTU_CHROOT/tmp
        export OBS_ROOT=$MER_ROOT/OBS
        export HYBRIS_MW_ROOT=$ANDROID_ROOT/hybris/mw/
        
        #export AOSP_MIRROR="10.20.15.143"
        
        #privoxy搭建本地http代理,并配置socks5代理,此处懂的都懂
        #proxy="http://127.0.0.1:8118"
        #export http_proxy="$proxy"
        #export https_proxy="$proxy"
        
        export RELEASE=$(grep VERSION_ID /etc/os-release | cut -d"=" -f2)
        EOF
        
        cat << 'EOF' | tee "$HOME"/.mersdkubu.profile
        function hadk() { source $HOME/.hadk.env; echo "Env setup for $DEVICE"; }
        export PS1="HABUILD_SDK [${DEVICE}] $PS1"
        hadk
        cd $ANDROID_ROOT
        . build/envsetup.sh
        breakfast $DEVICE
        export USE_CCACHE=1
        export LC_ALL=C
        alias hh="mka hybris-hal"
        alias hb="mka hybris-boot"
        alias clean="mka clean"
        EOF
        
        cat << 'EOF' | tee "$HOME"/.mersdk.profile
        
        alias enter_scratchbox="sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R"
        
        PS1="PlatformSDK $PS1"
        alias ubu="ubu-chroot -r $PLATFORM_SDK_ROOT/sdks/ubuntu"
        alias bp="rpm/dhd/helpers/build_packages.sh"
        alias build_all_packages="bp"
        
        pushd () {
          command pushd "$@" > /dev/null
        }
        
        popd () {
          command popd "$@" > /dev/null
        }
        
        die () {
          if [ -z "$*" ]; then
            echo "command failed at `date`, dying..."
          else
            echo "$*"
          fi
          exit 1
        }
        
        
        function setup_ubuntuchroot {
          pushd $HOME
          TARBALL=ubuntu-trusty-20180613-android-rootfs.tar.bz2
          curl -k -O -C - https://releases.sailfishos.org/ubu/$TARBALL || die "Error downloading ubuntu rootfs"
          sudo rm -rf $UBUNTU_CHROOT
          sudo mkdir -p $UBUNTU_CHROOT
          sync
          sudo tar --numeric-owner -xjf $TARBALL -C $UBUNTU_CHROOT
          ubu-chroot -r $UBUNTU_CHROOT /bin/bash -c "echo Installing useful tools && sudo apt-get update && sudo apt-get install -y ImageMagick"
          ubu-chroot -r $UBUNTU_CHROOT /bin/bash -c 'exit'
          # 1000 是默认你是用的默认用户才进行操作的,这一步是解决账号过期的问题的。
          # 执行sudo su 会提示:sudo: account validation failure, is your account locked?
          sudo chroot $UBUNTU_CHROOT /bin/bash -c "chage -M 999999 $(id -nu 1000)"
          popd
        }
        
        
        function fetch_sources {
          #解决出现fatal: cannot run /usr/bin/gpg: No such file or directory 等之类的错误
          rm -rf $HOME/.repoconfig
          git config --global gpg.program $(which gpg2)
        
          #设置repo的同步范围
          echo Initializing repo && cd $ANDROID_ROOT && repo init -u git://github.com/mer-hybris/android.git -b $HYBRIS_BRANCH
          #内网镜像
          #sed -ri "s;https://android.googlesource.com;git://${AOSP_MIRROR};" .repo/manifests/default.xml
            
          #自定义项目,来自于birdzhang的git仓库
          mkdir -p .repo/local_manifests
          cat <<'FOE' | tee .repo/local_manifests/cancro.xml
        <?xml version="1.0" encoding="UTF-8"?>
        <manifest>
          <project path="device/xiaomi/vince" name="Sailfish-On-Vince/device_xiaomi_vince" revision="master" />
          <project path="vendor/xiaomi/vince" name="Sailfish-On-Vince/vendor_xiaomi_vince" revision="master" />
          <project path="kernel/xiaomi/msm8953" name="Sailfish-On-Vince/Xiaomi_Kernel_OpenSource" revision="tiffany-n-oss" clone-depth="1"/>
          <project path="hybris/droid-hal-version-vince" name="Sailfish-On-Vince/droid-hal-version-vince" revision="master" />
          <project path="hybris/droid-configs" name="Sailfish-On-Vince/droid-config-vince" revision="master" />
          
          <remove-project name="mer-hybris/hybris-boot" />
          <project path="hybris/hybris-boot" name="Sailfish-On-Vince/hybris-boot" revision="master" />
          
          <project path="rpm" name="Sailfish-On-Vince/droid-hal-vince" revision="master" />
         
        </manifest>
        FOE
          #获取源代码
          echo Syncing sources && cd $ANDROID_ROOT && repo sync --force-sync --fetch-submodules --no-clone-bundle --no-tags
        #   repo sync 的参数:
        # -j:开启多线程同步操作,会加快sync命令的执行速度。默认情况下,使用4个线程并发进行sync。
        # -c, –current-branch:只同步指定的远程分支。默认情况下,sync会同步所有的远程分支,当远程分支比较多的时候,下载的代码量就大。使用该参数,可以缩减下载时间,节省本地磁盘空间。
        # -d, –detach:脱离当前的本地分支,切换到manifest.xml中设定的分支。在实际操作中这个参数很有用,当我们第一次sync完代码后,往往会切换到dev分支进行开发。如果不带该参数使用sync, 
        #               则会触发本地的dev分支与manifest设定的远程分支进行合并,这会很可能会导致sync失败。
        # -f, –force-broken:当有git库sync失败了,不中断整个同步操作,继续同步其他的git库。
        # –no-clone-bundle:在向服务器发起请求时,为了做到尽快的响应速度,会用到内容分发网络(CDN, Content Delivery Network)。同步操作也会通过CDN与就近的服务器建立连接, 使用HTTP/HTTPS的$URL/clone.bundle来初始化本地的git库, 
        #                   clone.bundle实际上是远程git库的镜像,通过HTTP直接下载,这会更好的利用网络带宽,加快下载速度。
        }
        
        function setup_scratchbox {
          pushd $HOME
        
          sdk-assistant create $VENDOR-$DEVICE-latest http://releases.sailfishos.org/sdk/targets/Sailfish_OS-$RELEASE-Sailfish_SDK_Tooling-i486.tar.7z
          sdk-assistant create $VENDOR-$DEVICE-$PORT_ARCH http://releases.sailfishos.org/sdk/targets/Sailfish_OS-$RELEASE-Sailfish_SDK_Target-$PORT_ARCH.tar.7z
          sdk-assistant create $VENDOR-$DEVICE-i486 http://releases.sailfishos.org/sdk/targets/Sailfish_OS-$RELEASE-Sailfish_SDK_Target-i486.tar.7z
          sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
          sudo sed "s/\tlocalhost/\t$(</parentroot/etc/hostname)/g" -i $UBUNTU_CHROOT/etc/hosts
          popd
        }
        
        function test_scratchbox {
          sudo mkdir -p $TMPDIR
          pushd $TMPDIR
        
          cat <<'FOE' | tee main.c
        #include <stdlib.h>
        #include <stdio.h>
        int main(void) {
        printf("Scratchbox, works!\n");
        return EXIT_SUCCESS;
        }
        FOE
        
          sb2 -t $VENDOR-$DEVICE-$PORT_ARCH gcc main.c -o test
          sb2 -t $VENDOR-$DEVICE-$PORT_ARCH ./test
        
          popd
        }
        function modify_config {
          echo "MINIMEDIA_AUDIOPOLICYSERVICE_ENABLE := 1" > external/droidmedia/env.mk
          #针对64位的系统
          echo 'DROIDMEDIA_32 := true' >> external/droidmedia/env.mk
          echo 'FORCE_HAL:=1' >> external/droidmedia/env.mk
          sed "s/Werror/Werror -Wno-unused-parameter/" -i frameworks/av/services/camera/libcameraservice/Android.mk
        
          #下面这三个需要更新到最新,以适配最新SDK
          git -C rpm/dhd/ pull github master
          git -C rpm/dhd/ checkout master
        
          git -C hybris/droid-configs/droid-configs-device pull github master
          git -C hybris/droid-configs/droid-configs-device checkout master
        
          git -C hybris/droid-hal-version-$DEVICE/droid-hal-version pull github master
          git -C hybris/droid-hal-version-$DEVICE/droid-hal-version checkout master
        
          # http://collabedit.com/kr9xx
          # 4.2.0.21 的SDK,需要指定响应版本、git提交
          git -C external/droidmedia/ pull --all
          git -C external/droidmedia/ fetch github --tags
          git -C external/droidmedia/ checkout tags/0.20210702.0 -b 0.20210702.0
        
          # 开始这个目录不存在,bp -m之后再执行
          # git -C hybris/mw/gst-droid checkout upgrade-4.2.0
        
          git -C external/audioflingerglue checkout master
        }
        function build_hybrishal {
        
          ubu-chroot -r $PLATFORM_SDK_ROOT/sdks/ubuntu /bin/bash -c "echo Building hybris-hal && cd $ANDROID_ROOT && source build/envsetup.sh && breakfast $DEVICE && make -j8 hybris-hal"
          ubu-chroot -r $PLATFORM_SDK_ROOT/sdks/ubuntu /bin/bash -c "echo Building hybris-hal && cd $ANDROID_ROOT && source build/envsetup.sh && breakfast $DEVICE && make -j4 libcameraservice_32"
          ubu-chroot -r $PLATFORM_SDK_ROOT/sdks/ubuntu /bin/bash -c "echo Building hybris-hal && cd $ANDROID_ROOT && source build/envsetup.sh && breakfast $DEVICE && make -j4 libdroidmedia_32 minimediaservice minisfservice libminisf_32"
          ubu-chroot -r $PLATFORM_SDK_ROOT/sdks/ubuntu /bin/bash -c "echo Building hybris-hal && cd $ANDROID_ROOT && source build/envsetup.sh && breakfast $DEVICE && make -j4 droidmedia audioflingerglue"
        
        }
        function build_packages {
          pushd $ANDROID_ROOT
          # rpm/dhd/helpers/build_packages.sh $@
          rpm/dhd/helpers/build_packages.sh -d
          rpm/dhd/helpers/build_packages.sh -c
          rpm/dhd/helpers/build_packages.sh -m
          sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper in "pkgconfig(audiosystem-passthrough)"
          sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper in "pkgconfig(libdroid-util)"
          rpm/dhd/helpers/build_packages.sh -m
          rpm/dhd/helpers/build_packages.sh -g
          # http://collabedit.com/kr9xx
          # 4.2.0.21 的SDK,需要指定响应版本、git提交
          git -C hybris/mw/gst-droid checkout upgrade-4.2.0
          git -C hybris/mw/gmp-droid/ pull origin master
          git -C hybris/mw/gmp-droid checkout -b 0.2 0.2
          # -o 是离线构建,因为切换了tag分支,构建脚本默认会pull到最新,需要使用离线功能
          rpm/dhd/helpers/build_packages.sh -o -g
          sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper in droid-config-$DEVICE
          rpm/dhd/helpers/build_packages.sh -v
          rpm/dhd/helpers/build_packages.sh -i
          popd
        }
        
        function mer_man {
          echo "  1) setup_scratchbox: sets up a cross compilation toolchain to build mer packages"
          echo "  2) fetch_sources: fetch android/mer sources"
          echo "  3) setup_ubuntuchroot: set up ubuntu chroot for painless building of android"
          echo "  4) test_scratchbox: tests the scratchbox toolchain."
          echo "  5) modify_config: modify some config file; update git submodule."
          echo "  6) build_hybrishal: builds the hybris-hal needed to boot sailfishos for $DEVICE"
          echo "  7) build_packages: builds packages needed to build the sailfishos rootfs of $DEVICE"
        }
        
        hadk() {
                echo
                source $HOME/.hadk.env
                echo "Env setup for $DEVICE"
                cd $ANDROID_ROOT
        }
        hadk
        mer_man
        EOF
        
        

        构建

        • 终端输入bash进入
        • bash环境下输入sfossdk,将进入Platform_SDK的chroot环境,也是构建镜像的环境,此时正常会出现如下菜单:
        1) setup_scratchbox: sets up a cross compilation toolchain to build mer packages
        2) fetch_sources: fetch android/mer sources
        3) setup_ubuntuchroot: set up ubuntu chroot for painless building of android
        4) test_scratchbox: tests the scratchbox toolchain.
        5) modify_config: modify some config file; update git submodule.
        6) build_hybrishal: builds the hybris-hal needed to boot sailfishos for $DEVICE
        7) build_packages: builds packages needed to build the sailfishos rootfs of $DEVICE
        
        • 输入setup_scratchbox,安装构建用的target和tooling。
        • 输入setup_ubuntuchroot,安装用于构建内核、hybris-hal所用到的ubuntu chroot环境。
        • 输入fetch_sources,将拉取源码。
        • 输入modify_config,将做一些配置,详细看上面脚本或者"$HOME"/.mersdk.profile文件。
        • 输入build_hybrishal,将构建hybris-hal/hybris-boot等。
        • 输入build_packages,将构建SFOS镜像,建议手动分步执行。

        注意事项 & 技巧

        内核参数修改

        内核构建完成后,请检查内核参数:

        HABUILD_SDK $ cd $ANDROID_ROOT hybris/mer-kernel-check/mer_verify_kernel_config \ ./out/target/product/$DEVICE/obj/KERNEL_OBJ/.config
        

        build droid-hal-device 时,会自动检查,可能会出现错误,某某参数应该如何如何,日志参考:https://fars.ee/P963
        根据提示,修改内核配置:检查$ANDROID_ROOT/device/$VENDOR/*/BoardConfig*.mk中TARGET_KERNEL_CONFIG的值。必须修改error项目,修改完成后,重新编译内核。

        然后修改/补充 对应的内核参数。

        如果修改了内核

        重新构建内核,请先清理一下

        cd system/core && git clean -x -f -d && cd -
        #重新进入ubu chroot环境: 
        ubu
        mka hybris-hal
        

        如果修改了droid-configs

        需要重新构建 droid-config;并手动安装,命令来自于rpm/dhd/helpers/build_packages.sh脚本

        bp -c
        sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper in droid-config-$DEVICE
        bp -v 更新一下
        

        如果修改了mw\external

        重新编译,需要先清理

        cd hybris/mw/gst-droid && git clean -xfd && cd -
        cd hybris/mw/gmp-droid && git clean -xfd && cd -
        cd external/droidmedia/ && git clean -xfd && cd -
        bp -m
        bp -g
        

        手动装包,处理依赖

        PLATFORM_SDK $
        #命令来自rpm/dhd/helpers/build_packages.sh脚本
        sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper in droid-config-$DEVICE
        sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper in "pkgconfig(audiosystem-passthrough)"
        sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper in "pkgconfig(libdroid-util)"
        

        跳过开机教程

        左上、右上、右下、左下 四个角挨个点一下

        清理 Target

        PLATFORM_SDK $
        sdk-manage target remove $VENDOR-$DEVICE-$PORT_ARCH
        sdk-manage tooling remove Sailfish_OS-$RELEASE
        

        repo 同步单个项目

        PLATFORM_SDK $
        repo sync -c --force-sync --fetch-submodules --no-clone-bundle --no-tags kernel/xiaomi/cancro
        #kernel/xiaomi/cancro  是 .repo/local_manifests配置中的path。当前同步前如果有存在,请先删除。
        

        repo 同步失败

        error: in `sync -d --force-sync --fetch-submodules --no-clone-bundle --no-tags`: revision refs/tags/android-10.0.0_r40 in platform/cts not found
        # 解决办法:在根目录单独下载
        repo sync platform/cts
        

        straggler_files

        • 添加
        Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/sandy/Sailfish/src/installroot
        error: Installed (but unpackaged) file(s) found:
           /d
           /file_contexts.bin
           /property_contexts
           /sdcard
           /vendor
        
        
        RPM build errors:
            Empty %files file /home/sandy/Sailfish/src/dtbo.files
            Installed (but unpackaged) file(s) found:
           /d
           /file_contexts.bin
           /property_contexts
           /sdcard
           /vendor
        No journal files were found.
        Failed to seek to cursor: Invalid argument
        

        这个时候,就需要把相应的文件添加到 rpm/droid-hal-$DEVICE.spec文件中。

        • 移除
        File not found: /home/sandy/Sailfish/src/installroot/init.class_main.sh
            File not found: /home/sandy/Sailfish/src/installroot/init.mdm.sh
            File not found: /home/sandy/Sailfish/src/installroot/init.qcom.class_core.sh
            File not found: /home/sandy/Sailfish/src/installroot/init.qcom.syspart_fixup.sh
        

        这个时候,就需要把相应的文件从 rpm/droid-hal-$DEVICE.spec文件中删除。

        原理参考:rpmbuild

        在线构建某一个项目

        bp --mw=https://github.com/Sailfish-On-Vince/onyx-camera-settings-plugin
        

        本地构建某一个项目

        cd hybris/mw/
        git clone https://github.com/sailfishos/mapplauncherd
        #切到某tag
        git checkout -b 4.2.2 4.2.2
        bp -o -b hybris/mw/mapplauncherd
        

        关闭selinux

        修改BoardConfig.mk ( 例如device/xiaomi/whyred/BoardConfig.mk)文件中的cmdline:追加selinux=0;

        修改kernel参数(例如kernel/xiaomi/sdm660/arch/arm64/configs/whyred-perf_defconfig):追加内核参数CONFIG_SECURITY_SELINUX_BOOTPARAM=y。

        停用birdzhang自定义源

        需要编辑hybris/droid-configs/rpm/droid-config-vince.spec

        # OTA via self-hosted repo needs to have all adaptation-community repos removed
        #Conflicts: community-adaptation-testing     #屏蔽掉
        #Obsoletes: community-adaptation-testin     #屏蔽掉
        

        屏蔽掉这个源 hybris/droid-configs/sparse/usr/share/ssu/repos.d/20-repo.sailfishos.club.ini

        Debug(telenet & ssh)

        构建程序启用调试

        PLATFORM_SDK $ 
        sed -ri 's;#!/bin/bash$;#!/bin/bash -x;g' rpm/dhd/helpers/build_packages.sh
        sed -ri 's;#!/bin/bash$;#!/bin/bash -x;g' rpm/dhd/helpers/util.sh
        

        telnet

        手机连接电脑 usb 后,设置一下对应的 usb 网卡的 IP 地址:

        sudo ifconfig enp0s20f0u11 192.168.2.13
        

        然后,连接手机(debug 模式,无法正常启动时):

        telnet 192.168.2.15 2323
        

        如果 switch_root 失败,连接端口号使用 23:

        telnet 192.168.2.15 23
        

        导出启动日志:

        telnet 192.168.2.15 2323|tee init.log
        dmesg
        journalctl --no-page
        exit
        

        清理log脚本cleanlog.sh:

        #!/bin/bash
        file=$1
        perl -i -pe 's/\e[\[\(][0-9;]*[mGKFB]//g' "$file"
        sed -ri 's/\r$//' "$file"
        sed -ri 's/^\r//' "$file"
        

        ssh

        正常启动时,使用 ssh 连接(密码在 开发者模式 界面):

        如果没有 journalcal 日志,需要修改一下配置:/etc/systemd/journald.conf:Storage=persistent

        ssh 192.168.2.15|tee init.log
        devel-su
        dmesg
        journalctl --no-page
        /system/bin/logcat
        

        强制保留telnet

        刷完Sailfishos后,若能正常进入文件系统,默认关闭telnet服务,但也可以移除关闭telnet服务的脚本:进入twrp,使用adb shell连接进入系统:

        rm data/.stowaways/sailfishos/init_disable_telnet
        

        如果适配新设备

        #仅供参考,已知 rpm/dhd hybris-boot libhybris busybox 等都是必要的。
        mkdir hybris
        git clone --recurse-submodules https://github.com/Sailfish-On-Vince/droid-hal-vince rpm
        git clone --recurse-submodules https://github.com/mer-hybris/hybris-boot hybris/hybris-boot
        #添加挂载点,参考:https://blog.yoitsu.moe/sailfish/porting_sailfishos_1.html
        git clone --recurse-submodules https://github.com/Sailfish-On-Vince/droid-config-vince hybris/droid-configs
        git clone --recurse-submodules https://github.com/Sailfish-On-Vince/droid-hal-version-vince hybris/droid-hal-version-$DEVICE
        
        # 在 Platform_SDK环境中,在Android_Root目录,执行 rpm/dhd/helpers/add_new_device.sh 可添加设备,但有些内容
        # 需要自行修改, 比如rpm/droid-hal-$DEVICE.spec hybris/droid-configs/rpm/droid-config-$DEVICE.spec
        
        # 另外,因参考的项目有个性化仓库定制,需要编辑hybris/droid-configs/rpm/droid-config-vince.spec
        # OTA via self-hosted repo needs to have all adaptation-community repos removed
        #Conflicts: community-adaptation-testing     屏蔽掉
        #Obsoletes: community-adaptation-testin      屏蔽掉
        # 屏蔽掉这个源 hybris/droid-configs/sparse/usr/share/ssu/repos.d/20-repo.sailfishos.club.ini
        
        git clone --recurse-submodules https://github.com/sailfishos/droidmedia.git external/droidmedia
        #git clone --recurse-submodules https://github.com/mer-hybris/audioflingerglue.git external/audioflingerglue
        git clone --recurse-submodules https://github.com/mer-hybris/libhybris external/libhybris
        #busybox对于启动很重要,比原厂android构建的功能更强,具体请自行研究
        git clone --recurse-submodules https://github.com/mer-hybris/android_external_busybox_prebuilt external/busybox
        # 屏蔽原有的busybox的内容,可能是 vi vendor/*/common/bin/Android.mk
        
        
        1 条回复 最后回复 回复 引用 0
        • BirdZhangB 在线
          BirdZhang 船长
          最后由 编辑

          写的挺全的 undefined

          ———扬帆起航🚢

          S 1 条回复 最后回复 回复 引用 0
          • S 离线
            sandylaw @BirdZhang
            最后由 编辑

            @birdzhang 大佬指导的全面

            1 条回复 最后回复 回复 引用 0
            • kuailexsK 离线
              kuailexs
              最后由 编辑

              大佬牛掰

              挖自己的坑。让别人踩去。走别人的路。让别人无路可走。

              1 条回复 最后回复 回复 引用 0
              • 1 / 1
              • 第一个帖子
                最后一个帖子
              Copyright © 2017-2024 旗鱼俱乐部 旗鱼系统交流论坛
              🐟🐠🐡论坛客户端下载🐟🐠🐡
              友情链接 SailfishOS.org | Jolla | 官方论坛 | 移植wiki| 第三方商店 | BirdZhang的博客| Securest
              除非另有声明,本网站采用知识共享“署名 4.0 中国大陆”许可协议授权。
              根据相关法律法规,本站不对欧盟用户提供服务。
              Powered by NodeBB