精华内容
下载资源
问答
  • 高通kernel顶层目录下的AndroidKernel.mk文件高通kernel顶层目录下的AndroidKernel.mk文件是Android的编译系统的一部分,用来编译kernel。它的位置是在aosp/kernel目录下。文件层级结构定义变量【第一处】ifeq ($...

    高通kernel顶层目录下的AndroidKernel.mk文件

    高通kernel顶层目录下的AndroidKernel.mk文件是Android的编译系统的一部分,用来编译kernel。

    它的位置是在aosp/kernel目录下。

    文件层级结构

    定义变量【第一处】

    ifeq ($(TARGET_PREBUILT_KERNEL),)

    定义变量【第二处】

    ifeq ($(KERNEL_DEFCONFIG)$(wildcard $(KERNEL_CONFIG)),)

    $(error Kernel configuration not defined, cannot build kernel)

    else

    定义变量【第三处】

    定义一些目标和依赖

    endif

    endif

    文件具体内容(带注释)

    定义变量【第一处】

    PERL变量

    #Android makefile to build kernel as a part of Android Build

    PERL = perl

    KERNEL_TARGET 和 INSTALLED_KERNEL_TARGET 变量

    KERNEL_TARGET := $(strip $(INSTALLED_KERNEL_TARGET))

    ifeq ($(KERNEL_TARGET),)

    INSTALLED_KERNEL_TARGET := $(PRODUCT_OUT)/kernel

    endif

    在build/core/Makefile文件中,定义了INSTALLED_KERNEL_TARGET变量

    ifneq ($(strip $(TARGET_NO_KERNEL)),true)

    INSTALLED_KERNEL_TARGET := $(PRODUCT_OUT)/kernel

    else

    INSTALLED_KERNEL_TARGET :=

    endif

    TARGET_NO_KERNEL是在device/厂商/产品名/BoardConfig.mk中定义的

    TARGET_NO_KERNEL := false

    Makefile中,

    ifeq关键字用来判断参数是否相等,

    ifneq的关键字是用来判断参数是否不相等,

    格式为:

    ifneq (ARG1, ARG2) / ifneq (ARG1, ARG2)

    ifneq 'ARG1' 'ARG2' / ifneq 'ARG1' 'ARG2'

    ifneq "ARG1" "ARG2" / ifneq "ARG1" "ARG2"

    ifneq "ARG1" 'ARG2' / ifneq "ARG1" 'ARG2'

    ifneq 'ARG1' "ARG2" / ifneq 'ARG1' "ARG2"

    综上所述可知,不论TARGET_NO_KERNEL为false还是true,则KERNEL_TARGET和INSTALLED_KERNEL_TARGET的值都为$(PRODUCT_OUT)/kernel。

    TARGET_KERNEL_ARCH 和 KERNEL_ARCH 变量

    TARGET_KERNEL_ARCH := $(strip $(TARGET_KERNEL_ARCH))

    ifeq ($(TARGET_KERNEL_ARCH),)

    KERNEL_ARCH := arm

    else

    KERNEL_ARCH := $(TARGET_KERNEL_ARCH)

    endif

    TARGET_KERNEL_ARCH是在device/厂商/产品名/BoardConfig.mk中定义的。

    如果已经定义为某值(如arm64),KERNEL_ARCH就设定为该值(如arm64)。

    反之,则设定为默认值arm

    TARGET_KERNEL_HEADER_ARCH 和 KERNEL_HEADER_ARCH 变量

    TARGET_KERNEL_HEADER_ARCH := $(strip $(TARGET_KERNEL_HEADER_ARCH))

    ifeq ($(TARGET_KERNEL_HEADER_ARCH),)

    KERNEL_HEADER_ARCH := $(KERNEL_ARCH)

    else

    $(warning Forcing kernel header generation only for '$(TARGET_KERNEL_HEADER_ARCH)')

    KERNEL_HEADER_ARCH := $(TARGET_KERNEL_HEADER_ARCH)

    endif

    TARGET_KERNEL_ARCH是在device/厂商/产品名/BoardConfig.mk中定义的。

    如果TARGET_KERNEL_HEADER_ARCH为空,KERNEL_HEADER_ARCH就设定为KERNEL_ARCH的值。

    反之,则警告并将KERNEL_HEADER_ARCH设定为TARGET_KERNEL_HEADER_ARCH

    KERNEL_HEADER_DEFCONFIG 变量

    KERNEL_HEADER_DEFCONFIG := $(strip $(KERNEL_HEADER_DEFCONFIG))

    ifeq ($(KERNEL_HEADER_DEFCONFIG),)

    KERNEL_HEADER_DEFCONFIG := $(KERNEL_DEFCONFIG)

    endif

    KERNEL_DEFCONFIG是在device/厂商/产品名/AndroidBoard.mk中定义的。

    KERNEL_HEADER_DEFCONFIG未找到定义的地方。

    当KERNEL_HEADER_DEFCONFIG为空,则被赋值为KERNEL_DEFCONFIG。

    binder

    # Force 32-bit binder IPC for 64bit kernel with 32bit userspace

    ifeq ($(KERNEL_ARCH),arm64)

    ifeq ($(TARGET_ARCH),arm)

    KERNEL_CONFIG_OVERRIDE := CONFIG_ANDROID_BINDER_IPC_32BIT=y

    endif

    endif

    通过条件判断,是否让32-bit的binder IPC(进程间通信机制) 强制运行于64bit的kernel的32bit用户空间。

    TARGET_KERNEL_CROSS_COMPILE_PREFIX 和 KERNEL_CROSS_COMPILE 变量

    TARGET_KERNEL_CROSS_COMPILE_PREFIX := $(strip $(TARGET_KERNEL_CROSS_COMPILE_PREFIX))

    ifeq ($(TARGET_KERNEL_CROSS_COMPILE_PREFIX),)

    KERNEL_CROSS_COMPILE := arm-eabi-

    else

    KERNEL_CROSS_COMPILE := $(TARGET_KERNEL_CROSS_COMPILE_PREFIX)

    endif

    TARGET_KERNEL_CROSS_COMPILE_PREFIX是在device/厂商/产品名/AndroidBoard.mk中定义的。

    例:TARGET_KERNEL_CROSS_COMPILE_PREFIX := aarch64-linux-android-

    定义变量【第二处】

    KERNEL_CFLAGS变量

    KERNEL_GCC_NOANDROID_CHK := $(shell (echo "int main() {return 0;}" | $(KERNEL_CROSS_COMPILE)gcc -E -mno-android - > /dev/null 2>&1 ; echo $$?))

    ifeq ($(strip $(KERNEL_GCC_NOANDROID_CHK)),0)

    KERNEL_CFLAGS := KCFLAGS=-mno-android

    endif

    KERNEL_GCC_NOANDROID_CHK 变量如果为0,则定义KERNEL_CFLAGS为KCFLAGS=-mno-android

    mkfile_path变量

    mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))

    获得mk文件路径

    current_dir变量

    current_dir := $(notdir $(patsubst %/,%,$(dir $(mkfile_path))))

    TARGET_KERNEL_VERSION变量

    ifeq ($(TARGET_KERNEL_VERSION),)

    TARGET_KERNEL_VERSION := 3.18

    endif

    TARGET_KERNEL变量

    TARGET_KERNEL := msm-$(TARGET_KERNEL_VERSION)

    通过TARGET_KERNEL变量,定义KERNEL_OUT等变量

    ifeq ($(TARGET_KERNEL),$(current_dir))

    # New style, kernel/msm-version

    BUILD_ROOT_LOC := ../../

    TARGET_KERNEL_SOURCE := kernel/$(TARGET_KERNEL)

    KERNEL_OUT := $(TARGET_OUT_INTERMEDIATES)/kernel/$(TARGET_KERNEL)

    KERNEL_SYMLINK := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ

    KERNEL_USR := $(KERNEL_SYMLINK)/usr

    else

    # Legacy style, kernel source directly under kernel

    KERNEL_LEGACY_DIR := true

    BUILD_ROOT_LOC := ../

    TARGET_KERNEL_SOURCE := kernel

    KERNEL_OUT := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ

    endif

    KERNEL_CONFIG变量

    KERNEL_CONFIG := $(KERNEL_OUT)/.config

    定义变量【第三处】

    TARGET_PREBUILT_INT_KERNEL变量

    ifeq ($(TARGET_USES_UNCOMPRESSED_KERNEL),true)

    $(info Using uncompressed kernel)

    TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/Image

    else

    ifeq ($(KERNEL_ARCH),arm64)

    TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/Image.gz

    else

    TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/zImage

    endif

    endif

    依据TARGET_KERNEL_APPEND_DTB变量,定义TARGET_PREBUILT_INT_KERNEL变量

    ifeq ($(TARGET_KERNEL_APPEND_DTB), true)

    $(info Using appended DTB)

    TARGET_PREBUILT_INT_KERNEL := $(TARGET_PREBUILT_INT_KERNEL)-dtb

    endif

    KERNEL_HEADERS_INSTALL变量

    KERNEL_HEADERS_INSTALL := $(KERNEL_OUT)/usr

    KERNEL_MODULES_INSTALL变量

    KERNEL_MODULES_INSTALL :=system

    KERNEL_MODULES_OUT变量

    KERNEL_MODULES_OUT := $(TARGET_OUT)/lib/modules

    TARGET_PREBUILT_KERNEL变量

    TARGET_PREBUILT_KERNEL := $(TARGET_PREBUILT_INT_KERNEL)

    宏mv-modules

    define mv-modules

    mdpath=`find $(KERNEL_MODULES_OUT) -type f -name modules.dep`;\

    if [ "$$mdpath" != "" ];then\

    mpath=`dirname $$mdpath`;\

    ko=`find $$mpath/kernel -type f -name *.ko`;\

    for i in $$ko; do mv $$i $(KERNEL_MODULES_OUT)/; done;\

    fi

    endef

    宏clean-module-folder

    define clean-module-folder

    mdpath=`find $(KERNEL_MODULES_OUT) -type f -name modules.dep`;\

    if [ "$$mdpath" != "" ];then\

    mpath=`dirname $$mdpath`; rm -rf $$mpath;\

    fi

    endef

    目标和依赖

    ifneq ($(KERNEL_LEGACY_DIR),true)

    $(KERNEL_USR): $(KERNEL_HEADERS_INSTALL)

    rm -rf $(KERNEL_SYMLINK)

    ln -s kernel/$(TARGET_KERNEL) $(KERNEL_SYMLINK)

    $(TARGET_PREBUILT_INT_KERNEL): $(KERNEL_USR)

    endif

    $(KERNEL_OUT):

    mkdir -p $(KERNEL_OUT)

    $(KERNEL_CONFIG): $(KERNEL_OUT)

    $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_DEFCONFIG)

    $(hide) if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \

    echo "Overriding kernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; \

    echo $(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_OUT)/.config; \

    $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) oldconfig; fi

    $(TARGET_PREBUILT_INT_KERNEL): $(KERNEL_OUT) $(KERNEL_HEADERS_INSTALL)

    $(hide) echo "Building kernel..."

    $(hide) rm -rf $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/dts

    $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_CFLAGS)

    $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_CFLAGS) modules

    $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) INSTALL_MOD_PATH=$(BUILD_ROOT_LOC)../$(KERNEL_MODULES_INSTALL) INSTALL_MOD_STRIP=1 ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) modules_install

    $(mv-modules)

    $(clean-module-folder)

    $(KERNEL_HEADERS_INSTALL): $(KERNEL_OUT)

    $(hide) if [ ! -z "$(KERNEL_HEADER_DEFCONFIG)" ]; then \

    rm -f $(BUILD_ROOT_LOC)$(KERNEL_CONFIG); \

    $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_HEADER_DEFCONFIG); \

    $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) headers_install; fi

    $(hide) if [ "$(KERNEL_HEADER_DEFCONFIG)" != "$(KERNEL_DEFCONFIG)" ]; then \

    echo "Used a different defconfig for header generation"; \

    rm -f $(BUILD_ROOT_LOC)$(KERNEL_CONFIG); \

    $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_DEFCONFIG); fi

    $(hide) if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \

    echo "Overriding kernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; \

    echo $(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_OUT)/.config; \

    $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) oldconfig; fi

    kerneltags: $(KERNEL_OUT) $(KERNEL_CONFIG)

    $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) tags

    kernelconfig: $(KERNEL_OUT) $(KERNEL_CONFIG)

    env KCONFIG_NOTIMESTAMP=true \

    $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) menuconfig

    env KCONFIG_NOTIMESTAMP=true \

    $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) savedefconfig

    cp $(KERNEL_OUT)/defconfig $(TARGET_KERNEL_SOURCE)/arch/$(KERNEL_ARCH)/configs/$(KERNEL_DEFCONFIG)

    展开全文
  • 提取内核有两种方式:通过固件包提取,通常包含在KERNEL.img或boot.img之中。通过root权限的手机提取。A. 通过root权限设备提取以Nexus 5为例子1. 得到boot分区路径adb shellsucd /dev/block/platform/msm_sdcc.1/by...

    66b52468c121889b900d4956032f1009.png

    8种机械键盘轴体对比

    本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

    提取内核有两种方式:通过固件包提取,通常包含在KERNEL.img或boot.img之中。

    通过root权限的手机提取。

    A. 通过root权限设备提取

    以Nexus 5为例子

    1. 得到boot分区路径adb shell

    su

    cd /dev/block/platform/msm_sdcc.1/by-name

    ls -l boot

    1.png

    boot 是个系统符号软链接,/dev/block/mmcblk0p19 就是boot分区.

    2. 拷贝boot分区数据到sdcard 用 dd 将其dump到sdcard文件夹下:dd if=/dev/block/mmcblk0p19 of=/sdcard/boot.img

    得到boot.img文件!

    B. 通过固件包提取

    1. 解开固件包 具体打包方法各厂商都不同,有些厂商还有加密。(如:OPPO)

    2. 得到boot.img 解包后可直接得到boot.img。大部分手机的固件都为boot.img,少数会有其他名称(如华为EMUI: KERNEL.img)

    X. 从boot.img / KERNEL.img中提取kernel

    可以借助工具,工具有:

    《binwalk》《mkboot》《unpackbootimg》binwalk -e boot.img

    mkboot KERNEL.img ./output/ # 实际测试有些问题,提取出的kernel.gz不完整

    也可直接根据特征提有,粗略特征为:

    1. 定位boot.img / KERNEL.img 中KERNEL的部分:

    搜索字符串ANDROID!先定位到头部,头部后紧跟kernel的描述信息:

    2.png

    2. 提出kernel.gz包文件:

    接着以此为起点寻找”1F 8B 08 00”,即gzip的头部Magic。长度不管(直接从此处到文件尾)保存到新的文件如:kernel.gz。

    3.png

    3. 解压出kernel.gz中的真正raw文件:

    然后用gzip命令解压出文件(用图形界面解压会报错):gzip -d kernel.gz

    步骤2、用IDA加载

    ARM64的内核

    使用IDA64打开kernel文件,选择ARM Little-endian [ARM]:

    4.png

    5.png

    通常都在ARM64中,将kernel文件偏移0x1000加载到内存的0xffffffc000080000处:

    6.png

    ARMv7的内核

    7.png

    8.png

    步骤3. 为IDA中的内核增加符号支持

    以下脚本通过cat /proc/kallsyms的输出结果来对IDA中的内核函数sub_xxx进行重命名:

    (由于某个早期版本Android已经不再输出内核符号偏移地址全部以0填充,所以使用该方法前 需要修改kernel使其输出偏移地址。)// 使用一下IDA脚本(python),将函数/符号名设到对应的sub_xxx上

    ksyms = open("syms.txt")

    i = 0

    for line in ksyms:

    i += 1

    addr = int(line[0:8],16)

    name = line[11:-1]

    idaapi.set_debug_name(addr,name)

    MakeNameEx(addr,name,SN_NOWARN)

    add_func(addr)

    if i % 100 == 0:

    Message("cur: %dn" % i)

    # Message("%08X:%sn"%(addr,name))

    注意事项

    kernel加载地址的寻找:

    以上的kernel加载地址0xffffffc000080000只是比较普遍的情况,如果以上地址不能正确分析,也有两个方法:可利用cat /proc/kallsyms输出的符号与IDA中的函数进行结合分析,尝试推算出加载地址。

    通过代码中对字符串的引用来推算出加载地址。

    通过内核源文件:boot/boardconfig.h中宏配置寻找内核加载地址。

    文件偏移的寻找 开头处寻找不为00的数据:

    9.png

    加载后,默认为DCB数据,可以用一下脚本自动刷成代码:

    10.png#! python

    def main():

    start = AskAddr(MinEA(), "欲转为Code的起始地址:")

    end = AskAddr(MinEA(), "欲转为Code的结束地址:")

    if start >= end:

    print('输入的区间不正确~')

    return

    for cur_addr in range(start, end, 4):

    flags = GetFlags(cur_addr)

    print("[MSG] 0x%X 's flags: %x" % (cur_addr, flags))

    if Byte(cur_addr) and not (isCode(flags) and isTail(flags) and isUnknown(flags) and isHead(flags)):

    print('[MSG] 0x%X is Data, Make to code.' % cur_addr)

    MakeCode(cur_addr)

    main()

    参考资料

    展开全文
  • android kernel浅析

    2021-06-02 20:47:05
    drivers/misc/kernel_debugger.cdrivers/misc/pmem.cdrivers/misc/qemutrace/qemu_trace_sysfs.cdrivers/misc/qemutrace/qemu_trace.cdrivers/misc/qemutrace/qemu_trace.hdrivers/misc/uid_stat.cdrivers/staging/a...

    drivers/misc/kernel_debugger.c

    drivers/misc/pmem.c

    drivers/misc/qemutrace/qemu_trace_sysfs.c

    drivers/misc/qemutrace/qemu_trace.c

    drivers/misc/qemutrace/qemu_trace.h

    drivers/misc/uid_stat.c

    drivers/staging/android/lowmemorykiller.c

    drivers/staging/android/logger.c

    drivers/staging/android/timed_output.h

    drivers/staging/android/ram_console.c

    drivers/staging/android/timed_gpio.c

    drivers/staging/android/logger.h

    drivers/staging/android/binder.h

    drivers/staging/android/binder.c

    drivers/staging/android/timed_output.c

    drivers/staging/android/timed_gpio.h

    drivers/rtc/alarm.c

    drivers/rtc/rtc-goldfish.c

    drivers/net/pppolac.c

    drivers/net/ppp_mppe.c

    drivers/net/pppopns.c

    drivers/video/goldfishfb.c

    drivers/switch/switch_class.c

    drivers/switch/switch_gpio.c

    drivers/char/dcc_tty.c

    drivers/char/goldfish_tty.c

    drivers/watchdog/i6300esb.c

    drivers/input/misc/gpio_event.c

    drivers/input/misc/gpio_input.c

    drivers/input/misc/gpio_output.c

    drivers/input/misc/keychord.c

    drivers/input/misc/gpio_axis.c

    drivers/input/misc/gpio_matrix.c

    drivers/input/keyreset.c

    drivers/input/keyboard/goldfish_events.c

    drivers/input/touchscreen/synaptics_i2c_rmi.c

    drivers/usb/gadget/android.c

    drivers/usb/gadget/f_adb.h

    drivers/usb/gadget/f_mass_storage.h

    drivers/usb/gadget/f_adb.c

    drivers/usb/gadget/f_mass_storage.c

    drivers/mmc/host/goldfish.c

    drivers/power/goldfish_battery.c

    drivers/leds/ledtrig-sleep.c

    drivers/mtd/devices/goldfish_nand_reg.h

    drivers/mtd/devices/goldfish_nand.c

    kernel/power/earlysuspend.c

    kernel/power/consoleearlysuspend.c

    kernel/power/fbearlysuspend.c

    kernel/power/wakelock.c

    kernel/power/userwakelock.c

    kernel/cpuset.c

    kernel/cgroup_debug.c

    kernel/cgroup.c

    mm/ashmem.c

    include/linux/ashmem.h

    include/linux/switch.h

    include/linux/keychord.h

    include/linux/earlysuspend.h

    include/linux/android_aid.h

    include/linux/uid_stat.h

    include/linux/if_pppolac.h

    include/linux/usb/android.h

    include/linux/wifi_tiwlan.h

    include/linux/android_alarm.h

    include/linux/keyreset.h

    include/linux/synaptics_i2c_rmi.h

    include/linux/android_pmem.h

    include/linux/kernel_debugger.h

    include/linux/gpio_event.h

    include/linux/wakelock.h

    include/linux/if_pppopns.h

    net/ipv4/sysfs_net_ipv4.c

    net/ipv4/af_inet.c

    net/ipv6/af_inet6.c

    net/bluetooth/af_bluetooth.c

    security/commoncap.c

    fs/proc/base.c

    展开全文
  • New: fs/yaffs2/devextras.hNew: fs/yaffs2/KconfigNew: fs/yaffs2/MakefileNew: fs/yaffs2/moduleconfig.hNew: fs/yaffs2/yaffs_checkptrw.cNew: fs/yaffs2/yaffs_checkptrw.hNew: fs/yaffs2/yaffs_ecc.cNew: fs/ya...

    New: fs/yaffs2/devextras.h

    New: fs/yaffs2/Kconfig

    New: fs/yaffs2/Makefile

    New: fs/yaffs2/moduleconfig.h

    New: fs/yaffs2/yaffs_checkptrw.c

    New: fs/yaffs2/yaffs_checkptrw.h

    New: fs/yaffs2/yaffs_ecc.c

    New: fs/yaffs2/yaffs_ecc.h

    New: fs/yaffs2/yaffs_fs.c

    New: fs/yaffs2/yaffs_getblockinfo.h

    New: fs/yaffs2/yaffs_guts.c

    New: fs/yaffs2/yaffs_guts.h

    New: fs/yaffs2/yaffsinterface.h

    New: fs/yaffs2/yaffs_mtdif1.c

    New: fs/yaffs2/yaffs_mtdif1.h

    New: fs/yaffs2/yaffs_mtdif2.c

    New: fs/yaffs2/yaffs_mtdif2.h

    New: fs/yaffs2/yaffs_mtdif.c

    New: fs/yaffs2/yaffs_mtdif.h

    New: fs/yaffs2/yaffs_nand.c

    New: fs/yaffs2/yaffs_nandemul2k.h

    New: fs/yaffs2/yaffs_nand.h

    New: fs/yaffs2/yaffs_packedtags1.c

    New: fs/yaffs2/yaffs_packedtags1.h

    New: fs/yaffs2/yaffs_packedtags2.c

    New: fs/yaffs2/yaffs_packedtags2.h

    New: fs/yaffs2/yaffs_qsort.c

    New: fs/yaffs2/yaffs_qsort.h

    New: fs/yaffs2/yaffs_tagscompat.c

    New: fs/yaffs2/yaffs_tagscompat.h

    New: fs/yaffs2/yaffs_tagsvalidity.c

    New: fs/yaffs2/yaffs_tagsvalidity.h

    New: fs/yaffs2/yportenv.h

    展开全文
  • 编译Androidkernel

    2021-06-04 03:49:32
    一 下载cd kernel 进入我们刚才创建的kernel文件夹git branch -avv 查看远程的git 库我们选择remotes/origin/android-goldfish-2.6.29分支来下载git checkout -b android-goldfish-2.6.29 remotes/origin/android-...
  • 安装git,运行:git clone https://android.googlesource.com/kernel/common如果common目录为空,则运行:git branch -r则可以看到:origin/HEAD -> origin/masterorigin/android-2.6.39origin/android-3.0origin/...
  • android kernel debug

    2021-01-11 19:08:50
    android kernel的source code中有很多使用pr_debug/dev_dbg输出的日志信息(例如device tree解析的代码,drivers/of/fdt.c)。默认情况下,kernel不会将这些日志输出到控制台上,比如dev_dbg定义如下: #if ...
  • AndroidKernel.mk

    2021-06-04 12:49:29
    #Android makefile to build kernel as a part of Android BuildPERL= perlKERNEL_TARGET := $(strip $(INSTALLED_KERNEL_TARGET))ifeq ($(KERNEL_TARGET),)INSTALLED_KERNEL_TARGET := $(PRODUCT_OUT)/kernelendifT...
  • 在从网上找到一个python脚本并加以研究后终于可以,这对于后面分析问题有帮助,记录便于后续使用,现在很多平台如高通,MTK会在kernel log打上android time , 众所周知, 启动时间一直就在,因此根据这两个时间就...
  • 问题平台android8.0 kernel4.9.44,想加个i2c驱动,打开log都是一件脑瓜疼的事。二.log总结android有三种log。1.kernel下面的,就是driver层log。2.kernel上面的,init和init.rc启动的程序的log,应用层3.kernel上面...
  • 搭建环境过于艰辛,做个记录....环境搭建内核代码下载git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git漏洞项目代码下载git clone ...
  • 【从制作logo到LCD显示或者VGA显示logo】1、制作logo的方法:首先选择一个自己喜欢的图片,然后通过GIMP软件将该图片保存为.png格式,变换方式这个就不说了(very easy),比如保存为linuxlogo.png....
  • Android Kernel如何确定使用哪个defconfig文件?答案:device/厂商名/项目名/AndroidBoard.mk 决定了使用哪个def_config文件1. 项目控制的AndroidBoard.mk以device/qcom/sm6150/AndroidBoard.mk为例子因为KERNEL_...
  • 1:包含kernel log对应用户空间头文件#include2:#define KPOC_LOGI(x...) do { KLOG_ERROR("client", x); } while (0)#define KPOC_LOGE(x...) do { KLOG_WARNING("client", x); } while (0)#define KPOC_LOGD(x......
  • The kernel is making those "millions of execution state switches" anyway regardless; every time it takes an interrupt or system call, or schedules a new task, it's preserving an EL0 context on the swi...
  • 当内核出现比较严重的错误时,如空指针,无响应,资源加载失败等会触发panic,无论是什么原因触发的kernel panic,最后都会调用panic(const char *fmt, ...)函数。在调用该函数之前,系统仍然处于运行状态,所以如果想...
  • 内核调谐器 Kernel Tuner:系统常常用起来卡,在怎么优化都会觉得无济于事,这也是这个软件所要功能重点,非常的强大,妈妈再也不当心我卡机了。官方介绍《内核调谐器 Kernel Tuner》是一款强大的系统工具,能够进行...
  • 编译linux内核映像a)准备交叉编译工具链android代码树中有一个prebuilt项目,包含了我们编译内核所需的交叉编译工具。注意:虽然Prebuilt下包含了交叉编译工具,但是编译时有可能会出现“/bin/sh: arm-eabi-gcc: not...
  • 本文以高通骁龙2100(MSM8909W)Android可穿戴平台为例,讲解驱动层中间层移植Sensor Hub的方法1、添加驱动代码(Kernel)1、驱动代码是有sensor原厂提供的, 我们只需要将其driver code copy /kernel/drivers/char/目录...
  • 高通平台android kernel 开机logo显示和传统linux一样由于高通8k平台lk下只有2s多点 故直接在kernel显示logo,这篇文章转载过来制作linux logo,其实这个当时学习就会,只不过忘记了。在这里重提一下ubuntu下的GIMP...
  • 可以直接在串口输入以下命令实现:logcat -v time -f /data/logcat.log | cat /proc/kmsg | tee /data/kernel_dmesg.log说明:logcat打印输出到data目录的logcat.log文件,dmesg打印,也就是kernel内核的打印会在...
  • 编译android kernel时,遇到error, forbidden warningsound/soc/codecs/es8323.c:1249:12: warning: 'entry_read' defined but not used [- Wunused-function]error, forbidden warning: es8323.c:1249scripts/...
  • 一般用systrace分析问题,我们... 转载请注明出处:https://www.cnblogs.com/zzcperf/p/14008147.html 标签:kernel,log,systrace,long,时间,import,Android 来源: https://www.cnblogs.com/zzcperf/p/14008147.html
  • I am using android 4.2.2(Jelly Been) with linux-kernel 3.0.31 source code. I am trying to hook open system call but i don't know that how to change a page from read-only to writable given an address b...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,283
精华内容 29,313
关键字:

安卓kernel