1.安装64位linux系统,我用的是deepin os 15.3

2、将系统升级到最新版本

sudo apt-get update && sudo apt-get upgrade

3.安装编译必须的插件(我是直接在网上抄的别人搭建cm13编译环境时写的)deepin安装OpenJDK7网上也有办法

sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.8-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev openjdk-7-jre openjdk-7-jdk pngcrush schedtool libxml2 libxml2-utils xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev lib32ncurses5-dev gcc-multilib maven tmux screen w3m ncftp liblz4-tool ccache

然后切换jdk gcc g++版本

4、建立repo(谷歌的不能用,所以找国内的镜像站,我的repo,aosp,android sdk都是从国内镜像站获取的,如清华的,中科大的)

mkdir ~/bin

PATH=~/bin:$PATH

curl https://storage-googleapis.lug.ustc.edu.cn/git-repo-downloads/repo > ~/bin/repo

chmod a+x ~/bin/repo

5、建立源码文件夹

mkdir ~/OMNI && cd ~/OMNI

6.创建repo链接,(https://github.com/omnirom/android))

repo init -u https://github.com/omnirom/android.git -b android-7.1

7.更换aosp镜像地址(更换成清华或中科大aosp镜像地址,原因……)

sudo gedit ~/OMNI/.repo/manifest.xm

找到下面这句

fetch="https://android.googlesource.com"

将其更改为下面的其中一个:(自己视情况选择)

清华大学AOSP镜像地址:fetch="https://aosp.tuna.tsinghua.edu.cn"

中国科学技术大学AOSP镜像地址:fetch="git://mirrors.ustc.edu.cn/aosp"

8.同步源码

repo sync -c -f -j8 --force-sync --no-clone-bundle

这是一个漫长的过程,100M宽带都同步了几天,中间出现断网,就再输入一次上面的指令继续同步,为此我在网上找了个自动续传的脚本,方便多了

9.解包官方recovery(第三方recovery也行)

工具:CarlivImageKitchen(Windows和Linux平台都有)

在xda淘的,mt6752和骁龙821,我都试过,解包,修改,打包,刷入,完全没有问题

解包会得到kernel,recovery.fstab,以及很多参数,都是有用的

10.为自己的机型准备devices

(1).弄清楚手机的配置参数

(2).到github找相近机型的device,有参考的省事多了

(3).Omni源码目录下新建device目录,OMNI/device/meizu/m1note

(4).OMNI/device/meizu/m1note下新建Android.mk,AndroidProducts.mk,BoardConfig.mk,omni_m1note.mk

(5)把官方boot或recovery解压得到的kernel,recovery.fstab拷贝过来,然后修改各个文件的内容,主要修改BoardConfig.mk,因为只编译recovery,里面内容较少,容易修改,需要的东西我们解包recovery是已经获取了,其他文件内容更少,也容易修改

(6)查看手机分区挂载点,手机开机,打开usb调试,连接电脑

Adb shell

ls -l /dev/block/platform/mtk-msdc.0/by-name/

不同手机会有点区别,尤其是/platform/mtk-msdc.0这里,我是通过cat proc/mounts命令找到的

(7)利用以上信息修改recovery.fstab,recovery解包的recovery.fstab不一定正确完整

(8)接下来完成创建的4个.mk文件

Android.mk

ifneq ($(filter m1note,$(TARGET_DEVICE)),)

LOCAL_PATH := $(call my-dir)

include $(call all-makefiles-under,$(LOCAL_PATH))

Endif

AndroidProducts.mk

PRODUCT_MAKEFILES := $(LOCAL_DIR)/omni_m1note.mk

Omni_m1note.mk

PRODUCT_RELEASE_NAME := m1note

# Inherit from the common Open Source product configuration

$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk)

# Inherit from our custom product configuration

$(call inherit-product, vendor/omni/config/common.mk)

PRODUCT_PACKAGES += \

charger_res_images \

charger

## Device identifier. This must come after all inclusions

PRODUCT_DEVICE := m1note

PRODUCT_MODEL := m1note

PRODUCT_NAME := omni_m1note

PRODUCT_BRAND := meizu

PRODUCT_MANUFACTURER := meizu

这三个文件很简单,改动也简单

(8)最重要的BoardConfig.mk

LOCAL_PATH := device/meizu/m1note

#下面的复制相同cpu机型的,或者自己查手机cpu信息,m1note只能在安卓4.4解锁,所以是32位

# Architecture

TARGET_ARCH := arm

TARGET_NO_BOOTLOADER := true

TARGET_BOARD_PLATFORM := mt6752

TARGET_CPU_ABI := armeabi-v7a

TARGET_CPU_ABI2 := armeabi

TARGET_ARCH_VARIANT := armv7-a-neon

TARGET_CPU_VARIANT := generic

TARGET_CPU_CORTEX_A53 := true

TARGET_CPU_SMP := true

ARCH_ARM_HAVE_TLS_REGISTER := true

TARGET_NO_FACTORYIMAGE := true

BOARD_MTK_LIBSENSORS_NAME :=

BOARD_MTK_LIB_SENSOR :=

#Bootloader

TARGET_BOOTLOADER_BOARD_NAME := m1note

#内核,用CarlivImageKitchen64解包官方boot或recovery就能得到这些

#Kernel

#内核路径

TARGET_PREBUILT_KERNEL := $(LOCAL_PATH)/kernel

#mtk需要这个

BOARD_CUSTOM_BOOTIMG_MK := $(LOCAL_PATH)/mkmtkboot.mk

BOARD_KERNEL_CMDLINE := bootopt=64S3,32S1,32S1

BOARD_KERNEL_BASE := 0x40078000

BOARD_KERNEL_PAGESIZE := 2048

BOARD_MKBOOTIMG_ARGS := \

--base 0x40000000 \

--pagesize 2048 \

--kernel_offset 0x00008000 \

--ramdisk_offset 0x04000000 \

--second_offset 0x00f00000 \

--tags_offset 0x0e000000 \

#分区大小,adb shell,cat /proc/partinfo,分区size要从十六进制转10进制

#Partition sizes

BOARD_BOOTIMAGE_PARTITION_SIZE := 16777216

BOARD_RECOVERYIMAGE_PARTITION_SIZE := 16777216

BOARD_SYSTEMIMAGE_PARTITION_SIZE := 1610612736

BOARD_USERDATAIMAGE_PARTITION_SIZE := 13217824768

BOARD_CACHEIMAGE_PARTITION_SIZE := 117440512

BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4

BOARD_FLASH_BLOCK_SIZE := 131072

BOARD_HAS_LARGE_FILESYSTEM := true

TARGET_RUNNING_WITHOUT_SYNC_FRAMEWORK := true

#Recovery

#编写好的recovery.fstab的路径

TARGET_RECOVERY_FSTAB := $(LOCAL_PATH)/recovery.fstab

TW_THEME := portrait_hdpi

BOARD_HAS_NO_SELECT_BUTTON := true

DEVICE_RESOLUTION := 1080x1920

TW_NO_USB_STORAGE := true

RECOVERY_GRAPHICS_USE_LINELENGTH := true

BOARD_HAS_NO_SELECT_BUTTON := true

BOARD_HAS_NO_SELECT_BUTTON := true

TARGET_RECOVERY_PIXEL_FORMAT := "RGBA_8888"

RECOVERY_FONT := roboto_15x24.h

WITH_DEXPREOPT := true

我的魅蓝m1note屏幕是倒的,所以加了这句

BOARD_HAS_FLIPPED_SCREEN := true

还有一些驱动,很多机型编译twrp不需要配置这些

TW_BRIGHTNESS_PATH := /sys/devices/platform/leds-mt65xx/leds/lcd-backlight/brightness

# The path to a temperature sensor

TW_CUSTOM_CPU_TEMP_PATH := /sys/class/thermal/thermal_zone1/temp

# USB Mounting

TARGET_USE_CUSTOM_LUN_FILE_PATH := /sys/class/android_usb/f_mass_storage/lun/file

TW_MTP_DEVICE := /dev/mtp_usb

#默认中文,网上没找到方法,自己想到把汉化文件放进源码,设置位默认语言

TW_EXTRA_LANGUAGES := true

#cp bootable/recovery/gui/theme/extra-languages/languages/zh_CN.xml bootable/recovery/gui/theme/common/languages/cn.xml

TW_DEFAULT_LANGUAGE := cn

#存储,m1note不知SD扩展,设置内置存储挂载点/data/media,清除data时会跳过/data/media

# Storages

BOARD_HAS_NO_MISC_PARTITION := true

TW_INTERNAL_STORAGE_PATH := "/data/media"

TW_INTERNAL_STORAGE_MOUNT_POINT := "data"

TW_FLASH_FROM_STORAGE := true

RECOVERY_SDCARD_ON_DATA := true

11.编译

cd ~/OMNI

. build/envsetup.sh

lunch

选择机型

make -j8 recoveryimage

正常编译几分钟就好,报错了就复制错误代码去GitHub或Google搜

12.mtk机型

编译之后,高通骁龙821的twrp recovery能直接刷入使用,mtk的mt6752的twrp recovery刷入无法启动

用CarlivImageKitchen解包生成的recovery.img发现解包ramdisk失败

网上找相关资料,都只说到mtk机型编译生成的recovery.img还需要处理

猜想可能是和mtk的512有关,所以又把out目录里的ramdisk相关的.cpio文件解压,重新打包进recovery

后来发现还可以在编译前配置一下

在BoardConfig.mk里添加

BOARD_HAS_MTK := true

BOARD_CUSTOM_BOOTIMG_MK := $(DEVICE_FOLDER)/mkmtkbootimg.mk

再新建mkmtkbootimg.mk文件

mkmtkbootimg.mk的内容:

# Copyright (C) 2013 The Android Open-Source Project

#

# Licensed under the Apache License, Version 2.0 (the "License");

# you may not use this file except in compliance with the License.

# You may obtain a copy of the License at

#

#      http://www.apache.org/licenses/LICENSE-2.0

#

# Unless required by applicable law or agreed to in writing, software

# distributed under the License is distributed on an "AS IS" BASIS,

# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

# See the License for the specific language governing permissions and

# limitations under the License.

#

# can this be done in bash? credits go to bgcngm

define make_header

perl -e 'print pack("a4 L a32 a472", "\x88\x16\x88\x58", $$ARGV[0], $$ARGV[1], "\xFF"x472)' $(1) $(2) > $(3)

endef

# this is overriding targets from build/core/Makefile

$(INSTALLED_KERNEL_TARGET).mtk.header: $(INSTALLED_KERNEL_TARGET)

size=$$($(call get-file-size,$(INSTALLED_KERNEL_TARGET))); \

$(call make_header, $$((size)), "KERNEL", $@)

$(INSTALLED_KERNEL_TARGET).mtk: $(INSTALLED_KERNEL_TARGET).mtk.header

$(call pretty,"Adding MTK header to kernel.")

cat $(INSTALLED_KERNEL_TARGET).mtk.header $(INSTALLED_KERNEL_TARGET) \

> $@

$(INSTALLED_RAMDISK_TARGET).mtk.header: $(INSTALLED_RAMDISK_TARGET)

size=$$($(call get-file-size,$(INSTALLED_RAMDISK_TARGET))); \

$(call make_header, $$((size)), "ROOTFS", $@)

$(INSTALLED_RAMDISK_TARGET).mtk: $(INSTALLED_RAMDISK_TARGET).mtk.header

$(call pretty,"Adding MTK header to ramdisk.")

cat $(INSTALLED_RAMDISK_TARGET).mtk.header $(INSTALLED_RAMDISK_TARGET) \

> $@

$(PRODUCT_OUT)/recovery_kernel.mtk.header: $(recovery_kernel)

size=$$($(call get-file-size,$(recovery_kernel))); \

$(call make_header, $$((size)), "KERNEL", $@)

$(PRODUCT_OUT)/recovery_kernel.mtk: $(PRODUCT_OUT)/recovery_kernel.mtk.header

$(call pretty,"Adding MTK header to recovery kernel.")

cat $(PRODUCT_OUT)/recovery_kernel.mtk.header $(recovery_kernel) > $@

$(recovery_ramdisk).mtk.header: $(recovery_ramdisk)

size=$$($(call get-file-size,$(recovery_ramdisk))); \

$(call make_header, $$((size)), "RECOVERY", $@)

$(recovery_ramdisk).mtk:  $(MKBOOTIMG) $(recovery_ramdisk).mtk.header

$(call pretty,"Adding MTK header to recovery ramdisk.")

cat $(recovery_ramdisk).mtk.header $(recovery_ramdisk) > $@

INTERNAL_MTK_BOOTIMAGE_ARGS := \

--kernel $(INSTALLED_KERNEL_TARGET).mtk \

--ramdisk $(INSTALLED_RAMDISK_TARGET).mtk

$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG)\

$(INSTALLED_RAMDISK_TARGET).mtk $(INSTALLED_KERNEL_TARGET).mtk

$(call pretty,"Target boot image: $@")

$(MKBOOTIMG) $(INTERNAL_MTK_BOOTIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) \

--output $@

$(hide) $(call assert-max-image-size,$@, \

$(BOARD_BOOTIMAGE_PARTITION_SIZE),raw)

@echo -e ${CL_CYN}"Made boot image: $@"${CL_RST}

INTERNAL_MTK_RECOVERYIMAGE_ARGS := \

--kernel $(PRODUCT_OUT)/recovery_kernel.mtk \

--ramdisk $(recovery_ramdisk).mtk

$(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTIMG) \

$(recovery_ramdisk).mtk $(PRODUCT_OUT)/recovery_kernel.mtk

@echo -e ${CL_CYN}"----- Making recovery image ------"${CL_RST}

$(MKBOOTIMG) $(INTERNAL_MTK_RECOVERYIMAGE_ARGS) \

$(BOARD_MKBOOTIMG_ARGS) --output $@

$(hide) $(call assert-max-image-size,$@, \

$(BOARD_RECOVERYIMAGE_PARTITION_SIZE),raw)

@echo -e ${CL_CYN}"Made recovery image: $@"${CL_RST}

记录魅族m1note编译TWRP recovery 3.1.0-0,包括mtk机型的处理方法的更多相关文章

  1. CEF3.2623使用记录:windows编译

    CEF3.2623使用记录:windows编译 1:cef3.2623下载地址 2623是cef3最后一个支持xp系统的版本,且可以支持html的audio标签,可以用作对html音频的处理下载地址为 ...

  2. OPPO R9sPlus MIFlash线刷TWRP Recovery ROOT详细教程

    教程转载来自 残芯此生不换  OPPO R9sPlus 目前最简单的刷Recovery root 方法,强烈推荐 新机想要刷第三方卡刷包的最简单过程是:           手机关机-->下载M ...

  3. 华为畅玩5 (CUN-AL00) 刷入第三方twrp Recovery 及 root

    华为畅玩5 (CUN-AL00) 刷入第三方twrp Recovery  及 root 下载地址    http://pan.baidu.com/s/1hsn6VzA 1. 在官网申请解锁码    申 ...

  4. grpc使用记录(一) gRPC编译(mscv/gcc)

    目录 1.编译前的准备工作 2.Windows下使用VS2019编译 2.1.使用cmake生成VS2019解决方案 2.2.使用msbuild工具进行编译 3.linux下编译 3.1 CentO ...

  5. Spark记录-源码编译spark2.2.0(结合Hive on Spark/Hive on MR2/Spark on Yarn)

    #spark2.2.0源码编译 #组件:mvn-3.3.9 jdk-1.8 #wget http://mirror.bit.edu.cn/apache/spark/spark-2.2.0/spark- ...

  6. 记 Mac Pro 系统升级后,编译安装 PHP-5.6.28 / PHP-7.0 报错修复过程

    买 Mac Pro 的时候,系统为 OS X 10.11.5,编译 PHP-5.6.21 的时候,也遇到一些坑,安装过程记录如下: Mac Pro 编译安装 PHP 5.6.21 及 问题汇总 后来, ...

  7. 我的复杂的OpenCV编译之路(OpenCV3.1.0 + VS2010 + Win7)

    教程:www.cnblogs.com/jliangqiu2016/p/5597501.html 这里主要记载我编译遇到的错误及解决方法. OpenCV3.1软件下载:https://sourcefor ...

  8. CentOS 6.4编译安装和部署Zabbix 2.0版本监控(中文)

    [一].zabbix简介 zabbix是一个基于web界面的提供分布式系统监视以及网络监视功能的企业级开元解决方案 zabbix由2部分构成,zabbix_server和可选组件zabbix_agen ...

  9. Centos7编译安装kafka-manager-2.0.0.2

    一.kafka-manager简介 项目地址为:https://github.com/yahoo/kafka-manager 为了简化开发者和服务工程师维护Kafka集群的工作,yahoo构建了一个叫 ...

随机推荐

  1. Mysql 学习目录

    Mysql 目录 Mysql之路[第一篇]:Mysql基础 Mysql之路[第二篇]:Mysql 常用命令 Mysql之路[第三篇]:Python对Mysql的操作 Mysql之路[第四篇]:ORM ...

  2. Appium自动化-基于java的环境搭建

    引言 自动化测试框架搭建主要分为以下几个方面的下载安装及环境配置: 1.jdk 2. adt 3. appium 4. testng插件 工具链接: https://pan.baidu.com/s/1 ...

  3. GET 方法和 POST方法区别

    两种 HTTP 请求方法:GET 和 POST 在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST. GET - 从指定的资源请求数据. POST - 向指定的资源提交 ...

  4. POJ 1971-Parallelogram Counting,暴力1063ms!

    Parallelogram Counting 刚学hash还不会用,看到5000ms的时限于是想着暴力来一发应该可以过.以前做过类似的题,求平行四边形个数,好像是在CF上做的,但忘了时限是多少了,方法 ...

  5. 九度oj 题目1340:小A的计算器

    题目描述: 以往的操作系统内部的数据表示都是二进制方式,小A新写了一个操作系统,系统内部的数据表示为26进制,其中0-25分别由a-z表示. 现在小A要在这个操作系统上实现一个计算器,这个计算器要能实 ...

  6. 九度oj 题目1017:还是畅通工程

    题目描述:     某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可 ...

  7. 【Luogu】P1013进制位(搜索)

    题目链接在这里 这题和虫食算比较类似.做完这道题可以去做虫食算.都是搜索一类的题. 这样 我们分析题目可以发现进制只可能是字母的个数,也就是n-1.为什么? 因为题目要求完整的加法表才算数.如果进制低 ...

  8. [luoguP3172] [CQOI2015]选数(递推+容斥原理)

    传送门 不会莫比乌斯反演,不会递推. 但是我会看题解. 先将区间[L,H]变成(L-1,H],这样方便处理 然后求这个区间内gcd为k的方案数 就是求区间((L-1)/k,H/k]中gcd为1的方案数 ...

  9. Spring boot+Spring Security 4配置整合实例

    本例所覆盖的内容: 1. 使用Spring Security管理用户身份认证.登录退出 2. 用户密码加密及验证 3. 采用数据库的方式实现Spring Security的remember-me功能 ...

  10. 陌上花开(bzoj 3262)

    Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...