`
tiwson
  • 浏览: 332992 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

编译小米内核源码出错问题解决(更新)

 
阅读更多

 

经过反复测试,以下方法也不能解决错误问题,目前只能按照github上的小米内核源码官方wiki进行编译,真心郁闷,希望有高人指点指点,谢谢。

以下是wiki地址:

                              https://github.com/MiCode/Xiaomi_Kernel_OpenSource/wiki

 

 

编译软件环境搭建:----依次执行下面#后面的语句,没有就安装

o Gnu C 3.2 # gcc --version
o Gnu make 3.80 # make --version
o binutils 2.12 # ld -v
o util-linux 2.10o # fdformat --version
o module-init-tools 0.9.10 # depmod -V
o e2fsprogs 1.41.4 # e2fsck -V
o jfsutils 1.1.3 # fsck.jfs -V
o reiserfsprogs 3.6.3 # reiserfsck -V
o xfsprogs 2.6.0 # xfs_db -V
o squashfs-tools 4.0 # mksquashfs -version
o btrfs-progs 0.18 # btrfsck
o pcmciautils 004 # pccardctl -V
o quota-tools 3.09 # quota -V
o PPP 2.4.0 # pppd --version
o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version
o nfs-utils 1.0.5 # showmount --version
o procps 3.2.0 # ps --version
o oprofile 0.9 # oprofiled --version
o udev 081 # udevd --version
o grub 0.93 # grub --version || grub-install --version
o mcelog 0.6 # mcelog --version
o iptables 1.4.2 # iptables -V

 

 

make menuconfig提示'make menuconfig' requires the ncurses libraries.  解决办法:

 

                       sudo apt-get install libncurses5-dev

 

 安装完毕之后再运行make menuconfig就可以了。

 

 

注意:本人开发环境是在ubuntu14.04进行的。

出现如下问题主要是交叉编译工具安装不正确,最终解决方法是重新安装交叉编译工具:

安装arm-linux-androideabi-gcc, arm-linux-androideabi-g++ // 安卓平台

由于某些需求需要将开源库移植到Android下.所以需要该编译器

                #: sudo apt-get install gcc-arm-linux-androideabi

然后重新:

 

export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-linux-androideabi-
cd xiaomi_kernel   #(这个是小米内核源码目录)
make clean
make menuconfig
make
 

——————————————————————————————————————————————

如下方法不能彻底解决问题,大家不要用了。

——————————————————————————————————————————————

 

在编译小米内核源码时,经常会遇到类似XXX.h : 没有文件或目录  的错误,具体错误原因应该跟交叉编译工具有关,原因未明白。可以采取如下方法解决:

例子:

缺少部分文件arch/arm/mach-msm/smd_init_dt.c:24:25: fatal error: smd_private.h: No such file or directory解决办法:

打开android/system/kernel/arch/arm/mach-msm/smd_init_dt.c
找到

#include <smd_private.h>


修改为

#include "smd_private.h"

 

修改完后继续make , 如果出其他类型的错误,请如下执行:

1:  make clean

2:  make

 

 

 

参考如下文章:

 

转载:http://cache.baiducontent.com/c?m=9d78d513d99001fe02fa940f5e5688711925df306d8dc7140fc3933e84652b1e0639f4bb56634f52c4c40c7006db5e5d9aab6a29711421c78ccffc5ddccbc46e38895723706b914062820de88b182a9b66d618feae6afaa7a062d2b9d2a48a00009644050dd1add44753489c2fad4f67f4a6ef4d115914baee3472ff2f743e9f5543a1478eba743159&p=8349dc0d92904ead08e2977e0d0591&newp=882a9645d68818c304be9b7c594c81231610db2151d0d001298ffe0cc4241a1a1a3aecbf26271306d0c37a6106ac425fe9f13172360234f1f689df08d2ecce7e64d14b68&user=baidu&fm=sc&query=arch/arm/mach-msm/smd_init_dt.c&qid=dff23c750003ecc0&p1=1

很多人都知道LG有个开源计划,但是一直都没人发这个的编译流程,这几天论坛没有什么新东西,发点上来供感兴趣的参考下,楼主也菜鸟来的,好多也不懂,希 望大家共同学习,水平烂,所以错误之处期望各位大大指正。需要注意的是,目前G3没有解锁bl,所以这个暂时没什么用。。 本教程也适用于其他lg机型比如G2等

正题开始:
首先要准备64位的ubuntu系统,如果不会安装你还不会ubuntu相关的知识,请暂时不要尝试了

楼主用的是linux mint  17 可能多少和ubuntu界面不一样,因为mint是基于ubuntu的,所以流程是一样的。

本教程用64位系统来做演示。
首先安装一些依赖包

sudo apt-get install bison build-essential curl flex git gnupg gperf libesd0-dev libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop openjdk-6-jdk openjdk-6-jre pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev  g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev


接下来是同步cm11的代码,官方给的说明是同步AOSP,楼主觉得用CM11省事点,以后还有别的用处。

创建同步需要的目录

mkdir -p ~/bin
mkdir -p ~/android/system


下载repo

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo


设置下bin的环境变量 这里对ubuntu来说应该没啥用。
编辑 ~/.profile
底部增加如下代码

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/binPATH"
fi


初始化同步列表

cd ~/android/system/
repo init -u https://github.com/CyanogenMod/android.git -b cm-11.0


开始同步

repo sync -j 4


耐心等待同步完成。同步完大概10多个G

下载lg开源计划内核源码
https://www.lg.com/global/suppor ... pes=ALL&search=D855


在输入框输入你的机型,本贴用d855举例


点击后面的source下载,大概130M左右

解压LGD855_Kitkat_V10a_Kernel.zip,得到LGD855_Kitkat_V10a_Kernel.tar.gz,再将LGD855_Kitkat_V10a_Kernel.tar.gz解压到~/android/system/


cd ~/android/system/kernel



export PATH=$PATH:tools/lz4demo


make ARCH=arm CROSS_COMPILE=../prebuilts/gcc/linux-x86/arm/arm-eabi-4.7/bin/arm-eabi- g3-lgu-perf_defconfig zImage -j4
这几条命令 在下载好的官方内核里有说明文件



耐心等待编译完成





==================================================================================================
下面是编译遇到的一些错误,我大概流水账的记录下,希望给真正动手人的一点帮助
==================================================================================================

做本教程的时候遇到一些错误 我弄一点就编译一点


缺少部分文件arch/arm/mach-msm/smd_init_dt.c:24:25: fatal error: smd_private.h: No such file or directory解决办法:

打开android/system/kernel/arch/arm/mach-msm/smd_init_dt.c
找到

#include <smd_private.h>


修改为

#include "smd_private.h"


缺少部分文件sound/soc/msm/qdsp6v2/rtac.c:28:21: fatal error: q6voice.h: No such file or directory
打开sound/soc/msm/qdsp6v2/rtac.c

找到

#include <q6voice.h>


修改为:

#include "q6voice.h"


缺少部分文件 drivers/misc/tspdrv/tspdrv.c:42:20: fatal error: tspdrv.h: No such file or directory
打开drivers/misc/tspdrv/tspdrv.c

找到

#include <tspdrv.h>


修改为

#include "tspdrv.h"


此文件还有其他类似的修改地方 我就一起标准了吧

#include <ImmVibeSPI.c>改为#include "ImmVibeSPI.c"

#include <tspdrvOutputDataHandler.c>
#ifdef CONFIG_HIGH_RES_TIMERS
    #include <VibeOSKernelLinuxHRTime.c>
#else
    #include <VibeOSKernelLinuxTime.c>
#endif


改为

#include "tspdrvOutputDataHandler.c"
#ifdef CONFIG_HIGH_RES_TIMERS
    #include "VibeOSKernelLinuxHRTime.c"
#else
    #include "VibeOSKernelLinuxTime.c"
#endif


缺少部分文件:
include/linux/nfc/pn547_lge_hwadapter.h:9:47: fatal error: ../../arch/arm/mach-msm/clock-rpm.h: No such file or directory

找到

#include "../../arch/arm/mach-msm/clock-rpm.h"


修改为:

#include "../../../arch/arm/mach-msm/clock-rpm.h"


cp: "/home/piaoxue99/android/system/kernel/firmware/synaptics/g3_kr/PLG298-F004.img" 与"firmware/synaptics/g3_kr/PLG298-F004.img" 为同一文件

文件:android/system/kernel/firmware/Makefile
找到

quiet_cmd_copy  = COPY    $@
cmd_copy  = cp $(srctree)/$@ $@


修改为:

#quiet_cmd_copy = COPY $@
#cmd_copy = cp $(srctree)/$@ $@


解决完这些就编译完了,生成文件在kernel/arch/arm/boot/zImage



下一期教程,搭配机型ramdisk.gz 打包到ramdisk.gz(没准什么时候出教程。。G2区还留了一堆尾巴。。)

如果你已经搞懂ramdisk.gz 可以直接用xiao1u大大的工具直接打包bootimg

分享到:
评论

相关推荐

    小米mix3内核编译过程.docx

    在编译内核之前,我们需要下载小米Mix3的内核源码。在这个例子中,我们使用了git clone命令从GitHub上下载了小米Mix3的内核源码,并将其命名为perseus-p-oss。 五、配置编译器 在下载了内核源码之后,我们需要配置...

    小米开源 Redmi K30 Pro 内核源码20200401备份-Xiaomi_Kernel_OpenSource-lmi-q-oss.zip

    3. 小米开源 Redmi K30 Pro 内核源码 http://t.cn/A6Z974Oj Redmi K30 Pro 的预装系统为 MIUI 11(基于 Android Q),随着内核源码的发布,开发者和愿意折腾的用户能够充分利用硬件的潜力,相信市场上也会很快...

    linux编译android内核源码问题

    - 解决方案:这两个文件是用于模拟器的BIOS文件,通常需要手动复制到指定位置才能解决问题。 - 将 `bios.bin` 和 `vgabios-cirrus.bin` 文件从 `prebuilt/common/pc-bios/` 复制到 `out/host/linux-x86/usr/...

    在Ubuntu下载、编译Android内核源码

    在`arch/arm/configs`目录下,你需要找到`goldfish_defconfig`,这是为编译内核所必需的。如果该文件不存在,可以通过切换到对应的远程分支来获取: ```bash git checkout remotes/origin/archive/android-gldfish-...

    编译Linux内核及调试内核模块

    3. 编译内核:文章中讲述了如何编译内核,包括make menuconfig、make、make modules、make modules_install、make install等命令的使用。 知识点:Linux内核的编译过程,包括make menuconfig、make、make modules、...

    自己动手编译Linux内核

    遇到问题时,应仔细检查日志信息,并查阅相关文档或在线资源来解决问题。此外,建议在编译新内核前备份现有内核,以防新内核无法正常启动,这样可以轻松恢复到原来的系统状态。 总之,编译Linux内核需要耐心和对...

    linux内核编译原理

    linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核...

    Linux内核源码包的安装及编译

    一旦配置完成,就可以开始编译内核了。首先,需要运行 `makedep` 命令来更新依赖关系: ```bash makedep ``` 接下来,可以编译内核镜像: ```bash make bzImage ``` 最后,编译模块: ```bash ...

    编译Linux内核的错误汇总

    在编译内核时,可能会出现以下错误: `scripts/kconfig/conf -s arch/arm/Kconfig CHK include/linux/version.h SYMLINK include/asm-arm/arch -&gt; include/asm-arm/arch-s3c2410 make[1]: `include/asm-arm/mach-...

    Linux 0.12内核源码

    学习内核源码通常需要编译和调试。了解makefile的编写,使用gcc编译器,以及gdb调试工具,是深入分析内核必不可少的技能。 通过学习Linux 0.12内核源码,开发者不仅可以理解操作系统的基本原理,还能锻炼阅读和...

    迅速入门Android内核编译 & 一加5 DC调光1

    在刷入自编译内核时需谨慎,以防止设备变砖。 总之,Android内核编译是一项技术性较强的工作,涉及到多个步骤和技术领域,包括交叉编译、源码管理、内核配置和设备驱动开发等。对于初学者来说,了解这些基础知识并...

    Ubuntu交叉编译环境与内核编译

    编译内核可以添加或移除特定的内核功能,优化性能,以及添加对新硬件的支持。 ####1. 获取Linux内核源码 Linux内核源码可以从官方网站或者通过版本控制工具如git来获取最新版本。 ####2. 配置内核选项 内核编译前...

    petalinux 内核源码 linux-xlnx-xilinx-v2020.1.zip

    《Petalinux内核源码解析——聚焦2020版》 Petalinux是Xilinx公司推出的一款基于Yocto Project的嵌入式Linux开发工具,它为开发者提供了构建定制化嵌入式Linux系统的一站式解决方案。本文将深入探讨2020版的...

    Ubuntu-32位机安装编译Android2.3源码及内核

    在本文中,我们将深入探讨如何在Ubuntu 32位系统上安装、编译Android 2.3源码以及内核,并解决编译过程中可能遇到的问题。Android 2.3,也被称为Gingerbread,是Android操作系统的一个重要版本,对开发者来说具有...

    freebsd 内核编译

    编译内核后,还需要更新用户模式库: ```bash make buildworld ``` 这将编译所有的用户模式程序和库。 六、安装内核 最后,安装新编译的内核到系统: ```bash make installkernel KERNCONF=MYKERNEL ``` 七、...

    Linux内核编译与裁剪

    - **编译内核**:使用`make`命令编译内核。这一步可能会花费较长时间,具体取决于硬件性能。 - **测试内核**:在目标平台上测试新编译的内核,确保所有必要的功能正常工作。 #### 四、编译Linux内核 编译Linux...

    linux内核编译实验报告

    - **编译Linux内核**: 执行`make bzImage`命令编译内核映像文件`bzImage`,并使用`make modules`和`make modules_install`命令编译并安装内核模块。 - **修改Grub配置**: 修改Grub配置文件以支持新编译的内核,确保...

    linux4.19内核源码

    进入上面的网址下载所需要编译的Linux内核,我选择了最新4.19.0版的内核,下载后为压缩包。(*请先保证网络正常) 2、存放 创建一个专属的文件夹,存放该压缩包。 二、编译部分 1、解压缩 如下图所示,并保证要进入...

    在ubuntu12.04下编译内核

    配置是编译内核的核心环节之一,它决定了最终内核支持哪些功能和设备。以下是配置步骤: 1. **使用默认配置:** 可以使用预设的默认配置文件作为起点。对于x86架构,可以使用`arch/x86/configs/i386_defconfig`。...

    基于fedora.Linux内核编译报告

    首先,编译Linux内核是一个多步骤的过程,主要包括以下几个步骤:下载解压Linux内核源码、安装软件依赖包、清除编译过程中产生的中间文件、配置内核选项、编译内核源码、安装编译出的内核以及重启系统加载新内核。...

Global site tag (gtag.js) - Google Analytics