iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、陀螺仪、CAN总线、RS485总线、500万摄像头等模块,稳定运行Android 4.0.3/Android 4.4操作,系统通用Linux-3.0.15+Qt操作系统(QT支持5.7版本),Ubuntu版本:12.04,接口智能分配 方便好用。
第七章 Android 4.4系统编译
本章节中将为您详细介绍 uboot、Linux3.0.15 和Android4.4 编译环境的搭建以及编译过程。
迅为电子给用户提供两种搭建编译环境的方式,一种方法是用户安装虚拟机,然后安装基础的 Ubuntu16.04 系统,利用我们提供工具和详细的使用步骤,搭建编译环境;另外一种方法是用户安装虚拟机,然后直接加载我们“搭建好的 Ubuntu 镜像”,用户只需要修改一下编译器的环境变量,就可以直接用来编译源码。
目前我们在 PC 机上搭建的开发环境是 Ubuntu16.04,嵌入式开发对宿主机(也就是建立开发环境的 PC 机)的版本很敏感,不同的宿主机上的 Ubuntu 版本在使用的时候也会遇到不同的情况和问题。所以建议大家在初次学习的时候一定注意版本问题,尽量和手册保持一致。
本手册基于 Ubuntu16.04 平台做交叉编译开发(Ubuntu 需要安装到 PC 机),所有的配置和编译脚本也是基于此平台。如果你对 Linux 和 Android 开发很熟悉,相信你会根据错误提示逐步找到原因并解决,错误提示一般是选用的平台缺少了某些库文件或者工具等原因造成的;我们强烈建议初学者使用和我们一致的平台,即 Ubuntu16.04,等将来使用熟练以后就可以自己来研究开发更新的版本了,理论上都是可行的。
请在迅为提供的网盘来下载 Ubuntu16.04 的镜像,安装的时候务必参考我们手册提供的步骤,这些步骤是经过严格测试的,请认真执行以免遗漏一些开发时所需要的组件。
Linux 的发行版本众多,我们无法为此一一编写文档,敬请原谅。
Uboot、Kernel(即 Linux 内核,下面等同)以及 Android 的编译环境看似复杂,用户只要抓住以下几个要点就可以了:
第一:Uboot、Kernel 编译器。编译器在光盘中都有提供,在需要使用的步骤中,会说明编译器在光盘中的位置。
第二:设置环境变量。Uboot、Kernel 编译器的环境变量设置后,编译的时候,系统才能找到编译器。
第三:Android 文件系统的编译器。编译器需要使用 Ubuntu 系统自带的 gcc 编译器, 但是版本不对,所以需要降低版本。迅为将这个过程编写了成几个简单的命令,用户只需要挨个执行命令就可以了。
第四:库文件。搭建过程中会给通过执行简单的脚本命令来安装库文件,复杂的步骤变的简单有效。
另外,如果用户想了解编译环境具体是怎么搭建起来的,可以利用我们提供的脚本文件来学习。
7.1 使用搭建好的环境(推荐)
使用已经搭建编译环境的镜像,用户只需要安装虚拟机“Vmware_Workstaion_wm”, 然后用虚拟机加载搭建好环境的 Ubuntu16.04 镜像。“搭建好的镜像”提供网址供大家下载,加载方法参考“3.1安装VMware-workstation”和“3.2 加载搭建好的Ubuntu16.04虚拟机”。加载完成后可以参考“第7.2章 搭建环境”检查环境是否正确。
7.2 搭建环境
本章介绍安装初始Ubuntu16.04 系统后,逐步搭建编译环境。这里需要注意的是,搭建过程中用到的各类软件,都需要和手册提到的版本保持一致,如果使用的是“搭建好的镜像”,则可以跳过这一节,但是编译的时候要针对性的设置一下环境变量。
7.2.1 安装基本软件
首先安装虚拟机“Vmware_Workstaion_wm”,然后使用虚拟机安装“Ubuntu16.04 初始系统”。Ubuntu 的安装方法可以参考 3.2.2小节来安装 Ubuntu16.04 原始系统,如下图所示,Ubuntu 初始系统安装完成。
输入密码“topeet”,登陆 Ubuntu,键盘上按“Ctrl+Alt+t”,弹出 Ubuntu 的控制台。如下图所示。
参考“3.3.3 Ubuntu基本设置”修改虚拟机配置,更改核数,内存。
参考“3.3.7联网设置”进行联网设置。
参考“3.3.8安装和使用SSH软件”安装SSH。
参考“3.3.6 Ubuntu修改数据源地址”更改数据源。
7.2.2 安装交叉编译器
编译的时候需要用到交叉编译工具,我们提供的交叉编译工具是用户光盘“iTOP-4412全功能版\20200624\iTOP-4412全功能版光盘资料\02_编译器以及烧写工具\arm 交叉编译器”文件夹中的压缩包“arm-2009q3.tar.bz2”。
使用 SSH 工具将交叉编译工具拷贝到 Ubuntu16.04 系统的文件夹“usr/local/arm”目录下,local 下默认没有 arm 文件夹,可以新建一个。如下图所示。
拷贝编译器之后如下图所示。
然后使用解压命令
tar -vxf arm-2009q3.tar.bz2
解压压缩包,解压完成如下图所示。
修改交叉编译工具路径,需要修改环境变量。在 Ubuntu 命令行中,执行命令“cd /root”和“vim .bashrc”,打开环境变量文件“.bashrc”,如下图所示。
然后在“.bashrc”文件中的最后一行添加如下信息:
export PATH=$PATH:/usr/local/arm/arm-2009q3/bin
如下图所示。
修改完成后保存退出。
执行下列命令,更新环境变量“source .bashrc”的命令,如下图所示。
最后,在 Ubuntu 命令行中输入命令“arm”,然后按 TAB 键,如果在命令行中能够看到 arm 编译器的信息,就表明交叉编译工具安装成功。如下图所示。
7.2.3 安装库文件、JDK
为了方便用户,将库文件和 JDK 的安装命令制作成了脚本文件,用户只要执行两个脚本就可以安装库文件和 JDK。这两个脚本在用户光盘“iTOP-4412全功能版\20200624\iTOP-4412全功能版光盘资料\02_编译器以及烧写工具\tools”文件夹下的压缩包“Android_JDK.tar.bz2”中,如下图所示。
用户将压缩包拷贝到 Ubuntu 系统中,解压压缩包会生成文件夹“Android_JDK”,如下图所示。
由于版本的问题,我们需要安装依赖包以及添加一个软件源,具体步骤如下:
使用以下命令安装依赖:
apt-get install libgl1-mesa-dev-lts-xenial
apt-get install libswitch-perl
apt-get install u-boot-tools
安装完成之后,使用命令
vim /etc/apt/sources.list
进入软件源:添加以下内容如下图所示:
deb http://cz.archive.ubuntu.com/ubuntu trusty main universe
添加完成之后,保存退出依次使用以下命令来更新和安装软件
sudo apt-get update
sudo apt-get upgrade
使用 cd 命令,进入解压出来的“Android_JDK” -->“jdk6”文件夹,运行脚本文件“install-sun-java6.sh”。
如下图所示,执行“./install-sun-java6.sh”脚本。
执行上面的命令的时候,根据提示输入“回车”命令。升级完成之后如下图所示:
进入解压出来的文件夹“Android_JDK”中运行脚本“install-devel-packages.sh”,安装库文件。在 Ubuntu 命令行中,执行命令“./install-devel-packages.sh”如下图所示:
上面命令执行的时候,需要根据提示输入“Y”。
安装完成,如下图所示。
这里需要注意的是,上面这个脚本执行完毕的时候,注意一下有些库文件是不是提示没有安装。如果发现有库文件没有安装,有可能是网络不好或者下载源丢失。这个时候用户使用一下更新下载源的命令”apt-get update“,然后再执行一下上面的两个脚本。
例如,如下图所示,再次运行“./install-devel-packages.sh”之后,提示没有无法安装的库和软件,那么表明已经安装完全了。
7.2.4 降低GCC版本
使用 Ubuntu 编译 Android 的时候需要用到 Ubuntu 系统自带的 GCC5 编译器,但是安装的 Ubuntu16.04 版本,它的 GCC 版本过高,所以这里需将要 GCC 编译的版本降低到 4.4.7。
进入前面解压的文件夹“Android_JDK”中,会看到一个文本“update_gcc.txt”,打开文本“update_gcc.txt”后会看到里面有 8 条命令,这 8 条命令需要在 Ubuntu 命令行中依次执行。如下图所示,使用命令打开“update_gcc.txt”文件。
如下图所示,有 8 条命令。
例如执行第一条命令。
根据提示输入“y”,其余几条命令,如下图所示,执行起来很快。
在执行了这 8 条命令之后,Ubuntu 系统就将 gcc 的版本降低到 4.4.7。如下图所示,使用命令“gcc -v”,可以看到 gcc 的版本为 4.4.7 了。
需要注意的是,在执行这 8 条命令时,只有第一条命令较长,其它的都会很快完成,而且命令一定要依次执行,不能有遗漏。
7.2.5 安装编译安卓应用库NDK
编译的时候需要用到安卓应用库NDK,我们提供的交叉编译工具是用户光盘“iTOP-4412全功能版\20200624\iTOP-4412全功能版光盘资料\02_编译器以及烧写工具”文件夹中的压缩包“android-ndk-r8b-linux-x86.tar.bz2”。
使用 SSH 工具将交叉编译工具拷贝到 Ubuntu16.04 系统的文件夹“usr/local/ndk”目录下,local 下默认没有 arm 文件夹,可以新建一个。如下图所示。
拷贝编译器之后如下图所示。
然后使用解压命令
tar -vxf android-ndk-r8b-linux-x86.tar.bz2
解压压缩包,解压完成如下图所。
修改交叉编译工具路径,需要修改环境变量。在 Ubuntu 命令行中,执行命令“cd /root”和“vim .bashrc”,打开环境变量文件“.bashrc”,如下图所示。
export PATH=$PATH:/usr/local/ndk/android-ndk-r8b
如下图所示。
修改完成后保存退出。
执行下列命令,更新环境变量“source .bashrc”的命令,如下图所示。
至此,编译安卓应用库NDK就安装完成了。
7.3 Android 4.4.4编译_v4.0底板(201702后购买)
7.3.1 编译U-boot
U-boot源码在光盘资料“iTOP-4412全功能版\20200624\iTOP-4412全功能版V4.0光盘资料\06_源码_uboot和kernel”目录下,如下图所示,
编译器是使用的光盘目录下,“iTOP-4412全功能版\20200624\iTOP-4412全功能版V4.0光盘资料\02_编译器以及烧写工具\arm 交叉编译器”下的“arm-2009q3.tar.bz2”。如果使用的是搭建好的环境,确保编译器环境变量, 如下图所示。
编译 uboot 的脚本是源码文件夹中的“build_uboot.sh”,在编译的时候需要向脚本传参数,根据核心板的不同,脚本执行参数如下表所示。
硬件分类 | 脚本执行参数 |
核心板 SCP 1G 内存 | SCP_1GDDR |
核心板 SCP 2G 内存 | SCP_2GDDR |
核心板POP 1G 内存 | POP_1GDDR |
核心板POP 2G 内存 | POP_2GDDR |
下面以SCP 1G核心板为例编译镜像。
将光盘“06_源码_uboot 和 kernel”目录下“CodeSign4SecureBoot_POP”、“CodeSign4SecureBoot_SCP”以及“iTop4412_uboot_xxx.tar.gz”拷贝到 Ubuntu 系统同一目录下,然后将“iTop4412_uboot_xxx.tar.gz”解压,得到“iTop4412_uboot”文件夹,如下图所示。
进入“iTop4412_uboot”文件夹,使用编译脚本“build_uboot.sh”编译 uboot,这里需要编译的是“SCP 1G 核心板”的 uboot 镜像,那么编译命令是:./build_uboot.sh SCP_1GDDR
输入编译命令,如下图所示。这里一定先确定核心板是哪种类型,然后将对应的参数传到脚本。
编译完成如下图所示:
如下图所示,脚本执行完成,在“iTop4412_uboot”文件夹下生成了“u-boot-iTOP- 4412.bin”文件。生成的文件“u-boot-iTOP-4412.bin”文件就是 SCP 1G 内存核心板对应的 uboot 镜像文件
7.3.2 编译Linux内核
源码目录
Linux 内核源码在光盘“iTOP-4412全功能版\20200624\iTOP-4412全功能版V4.0光盘资料\06_源码_uboot和kernel”目录下的压缩包“iTop4412_Kernel_3.0_xxxx.tar.gz”,“xxxx”表示日期,不定。
编译器
内核的编译器和 Android4.0.3 的内核编译器一模一样(arm-2009q3)。
配置文件
如果使用5寸屏,参考8.5章节打补丁。
将内核源码拷贝到 Ubuntu 系统目录“/home/topeet/iTOP-4412-supper-Android4.4-v4.0”下,解压之后,进入解压得到的“kernel/iTop4412_Kernel_3.0/”目录下的,如下图所示。
内核的编译是组合式配置文件,基本的配置文件名是“config_for_XX_YY_ZZ”,
XX 表示支持的系统,如:Android、linux、Ubuntu;
YY 表示支持的核心板,如:scp、pop;
ZZ 表示支持 sd 卡启动,仅 Ubuntu 需要。
分类 | 配置文件 |
Android 系统 POP 核心板 | config_for_android_pop |
Android 系统 SCP 核心板 | config_for_android_scp |
QtE 和 Linux 系统 POP 核心板 | config_for_linux_pop |
QtE 和 Linux 系统 SCP 核心板 | config_for_linux_scp |
Ubuntu 系统 POP 核心板 | config_for_ubuntu_pop |
Ubuntu 系统POP 核心板sd 卡启动 | config_for_ubuntu_pop_sd |
Ubuntu 系统 SCP 核心板 | config_for_ubuntu_scp |
Ubuntu 系统SCP 核心板sd 卡启动 | config_for_ubuntu_scp_sd |
如上表所示,全能版 Android4.4 系统可能用到的缺省文件就是 config_for_android_scp 和 config_for_android_pop。
如果使用5寸屏需要参考8.5章节打补丁。
编译生成镜像举例
如果用户是 scp 核心板,如下图所示,使用命令“cp -r config_for_android_scp .config”覆盖配置文件“.config”。
如果用户要使用 5 寸屏幕,先要参考用户手册“5.6 支持 5 寸屏的内核补丁文件”,给内核打补丁,然后使用命令“vim .config”,在文件中搜索关键词“CONFIG_TOUCHSCREEN_GT9XX=y”,在“CONFIG_TOUCHSCREEN_GT9XX=y”之后添加一行“CONFIG_TOPEET_LCD5X0=y”,添加完成之后,如下图所示。如果用户不使用 5 寸屏幕,则可以跳过这一步。
执行编译命令“make zImage”开始编译。
编译中,会报错,如下图所示:
我们使用命令
vim kernel/timeconst.pl
进入timeconst.pl文件,使用命令
/if (!defined(@val))
对报错的地方进行查找,如下图所示:
将(!defined(@val))改为(!@val),如下图所示:
保存退出,重新使用命令make zImage,进行编译,编译完成,如下图所示。
生成的内核镜像在目录“arch\arm\boot”下。
如果用户是 pop 核心板,则使用“cp -r config_for_android_pop .config”覆盖缺省文件。
由于 Android 代码中需要内核中 wifi 驱动,在编译好内核之后,还需要在内核目录中,执行编译模块的命令“make modules”,再执行编译后面 Android4.4 文件系统的脚本, Android4.4 源码才能通过。
7.3.3 编译Android 4.4.4文件系统
编译 Android4.4.4,还缺少一个“javap”命令,使用命令:
update-alternatives --install "/usr/bin/javap" "javap" "/usr/lib/jvm/jdk1.6.0_43/bin/javap" 1
更新一下,如下图所示。
Android4.4.4 的源码在光盘“iTOP-4412全功能版\20200624\iTOP-4412全功能版V4.0光盘资料\07_Android4.4.4 源码”目录下,需要先将 7z 压缩包解压, 解压得到 tar.gz 压缩包,然后将 tar.gz 压缩包拷贝到 Ubuntu 下。作者将其拷贝到“/home/topeet/iTOP-4412-supper-Android4.4-v4.0”目录下解压得到“iTop4412_KK4.4_git”目录,如下图所示。
在“iTop4412_KK4.4_git”目录下是Android4.4.4 源码,在“kernel/iTop4412_Kernel_3.0”目录下是内核源码。Android 源码要通过编译,那么“iTop4412_KK4.4_git”和“kernel/iTop4412_Kernel_3.0”目录则需要在同一级目录,而且内核需要先编译通过。
在 Android4.4 的源码目录下,使用命令“ls ../kernel/iTop4412_Kernel_3.0/”,如下图所示,内核的目录才是正确的。
进入 Android4.4.4 源码解压后得到文件夹“iTop4412_KK4.4”中,使用命令“./build_android.sh”,运行一键编译脚本,开始编译 Android4.4.4。注意:编译 Android4.4.4必须保证给 Ubuntu 系统提供 3G 以上内存。这里“提供 3G 以上内存”的意思,不仅仅是指在VMware Workstations 虚拟机中设置分配 3G 内存。例如,用户在编译的时候,PC 机的内存一共是 4G,在虚拟机中设置分配 3G 内存,但是在 Windows 系统下,开着 QQ,杀毒软件,音乐播放器,浏览器等等,这样在 Windows 下占用的内存就快 2G 了,那么虚拟机会自动调整到只占用 2G,甚至不到 2G 的内存,这样是没法编译通过的。
正确的分配内存方法是,首先给虚拟机分配 3G 以上内存,然后在 Windows 下关掉尽量多的不必要的应用,关掉尽量多应用的后台程序。
当然,如果用户的 PC 是 8G 或者 16G 内存,随意就成。
编译完成,在文件夹“iTop4412_KK4.4/out/target/product/smdk4x12”中,生成镜像“ramdisk-uboot.img”和“system.img”。
这里还需要注意的是,Android4.4.4 源码需要占用较大的空间,用户需要确认有足够的空间才能够成功编译。Android4.0.3 编译完成后总共大约占用 18G 的空间,Android4.4.4 编译完成后总共占用大约 36G 的空间。
用户完全按照步骤编译错误,可以使用“df -l”查看一下盘符剩余空间还剩下多少,如下图所示,如果是已使用 100%,则是空间不足。
7.4 旧源码Android4.4.4编译_v3.5底板(201702前购买)
在网盘目录中“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\android_4.4.4 源码以及对应 Kernel 源码”中下载 Android4.4.4 的文件系统以及内核源码。
这里请特别注意:该目录下有多个文件夹,请使用“20160311”目录下的源码和镜像,“20170803”是给精英版使用的。
7.4.1 编译U-boot
Android4.4.4 (201702前购买)对应 uboot 的源码,编译器,参数配置,编译脚本以及编译参数和Android4.4.4(201702后购买的) 的 uboot 全部一模一样。
7.4.2 编译Linux内核
源码目录
在网盘“iTOP4412开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\android_4.4.4 源码及镜像”目录下。
编译器
对应内核的编译器和 Android4.0.3 的内核编译器一模一样,使用arm-2009q3。
参数配置
如果使用5寸屏,参考8.5章节打补丁。
内核的编译是组合式配置文件,基本的配置文件名是“config_for_android_YY”,YY 表示用下表所示的参数替代。
硬件分类 | 配置文件 |
核心板 SCP 1G 或者 2G 内存 | config_for_android_scp |
WiFi 支持配置: | config_for_android_scp_wifi&Bluetooth |
核心板 POP 1G 或者 2G 内存 | config_for_android_pop |
WiFi 支持配置: | config_for_android_pop_wifi&Bluetooth |
如上表所示,如果需要 Android4.4.4 支持 WiFi,则需要对应参数配置。
如果使用5寸屏需要参考8.5章节打补丁。
和 Android4.0.3 内核一样,如果需要编译对应核心板的内核,首先使用 cp 命令将对应的配置文件覆盖掉”.config”,然后在执行编译命令“make zImage”。
然后使用编译命令“make zImage”,编译中,会报错,如下图所示:
我们使用命令
vim kernel/timeconst.pl
进入timeconst.pl文件,使用命令
/if (!defined(@val))
对报错的地方进行查找,如下图所示:
将(!defined(@val))改为(!@val),如下图所示:
保存退出,重新使用命令make zImage,进行编译,编译完成,如下图所示。
生成内核镜像的目录也是“arch\arm\boot”。
由于 Android 代码中需要内核中 wifi 驱动,在编译好内核之后,还需要在内核目录中,执行编译模块的命令“make modules”,再执行编译后面 Android4.4 文件系统的脚本, Android4.4 源码才能通过。
7.4.3 编译Android4.4.4文件系统
Android4.4.4 源码在网盘“iTOP4412开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\android_4.4.4 源码以及对应 Kernel 源码”目录中下载,编译器和参数配置和 Android4.0.3 一模一样
更新环境 javap
编译 Android4.4.4,还缺少一个“javap”命令,使用命令:
update-alternatives --install "/usr/bin/javap" "javap" "/usr/lib/jvm/jdk1.6.0_43/bin/javap" 1
更新一下,如下图所示。
源码下载
内核的源码也可以在 github 上下载,具体参考使用手册附录 6.2,附录中有迅为Android4.4 对应内核源码 github 下载地址。
使用手册附录中有介绍 repo 下载 Android4.4 源码的方法,但是从今年(2016)开始, repo 经常性的无法下载和使用。所以最好到迅为百度网盘中下载源码(目录参考使用手册编译章节),选取日期最近的目录下载即可。
网盘中源码包一般是 gz 后缀、7z 或者 rar 后缀。gz 后缀可以直接在 Ubuntu 下解压;7z 和 rar 后缀都是需要先在 windows 下解压出 gz 后缀压缩包,然后再在 Ubuntu 下解压。
内核以及 Android 源码路径
编译 Android4.4 源码的时候,一定要注意内核源码的目录。在和 Android 源码目录“ iTop4412_KK4.4_git ”的同一级目录下,新建一个 kernel 目录,然后将内核源码放到 kernel 目录下,要使用迅为默认的文件名“iTop4412_Kernel_3.0”。
例如:在 Android4.4 的源码目录下,使用命令“ls ../kernel/iTop4412_Kernel_3.0/”, 如下图所示,内核的目录才是正确的。
另外在编译 Android4.4 之前,必须成功编译 Android4.4 对应的内核。
然后进入 Android4.4.4 源码解压后得到文件夹“iTop4412_KK4.4”中,使用命令“./build_android.sh”,运行一键编译脚本,开始编译 Android4.4.4。注意:编译 Android4.4.4必须保证给 Ubuntu 系统提供 3G 以上内存。这里“提供 3G 以上内存”的意思,不仅仅是指在 VMware Workstations 虚拟机中设置分配 3G 内存。例如,用户在编译的时候,PC 机的内存一共是 4G,在虚拟机中设置分配 3G 内存,但是在 Windows 系统下,开着 QQ,杀毒软件, 音乐播放器,浏览器等等,这样在 Windows 下占用的内存就快 2G 了,那么虚拟机会自动调整到只占用 2G,甚至不到 2G 的内存,这样是没法编译通过的。
正确的分配内存方法是,首先给虚拟机分配 3G 以上内存,然后在 Windows 下关掉尽量多的不必要的应用,关掉尽量多应用的后台程序。
当然,如果用户的 PC 是 8G 或者 16G 内存,随意就成。
如下图所示,编译完成。在文件夹“iTop4412_KK4.4/out/target/product/smdk4x12” 中,生成镜像“ramdisk.img”和“system.img”。
这里还需要注意的是,Android4.4.4 源码需要占用较大的空间,用户需要确认有足够的空间才能够成功编译。Android4.0.3 编译完成后总共大约占用 18G 的空间,Android4.4.4 编译完成后总共占用大约 36G 的空间,如下图。
用户完全按照步骤编译错误,可以使用“df -l”查看一下盘符剩余空间还剩下多少,如下图所示,如果是已使用 100%,则是空间不足。
7.5 支持5寸屏的内核补丁文件
本节介绍如何给内核打补丁,以支持 5 寸屏幕。如果用户不使用 5 寸屏,本节可以直接跳过。
内核源码包是“iTop4412_Kernel_3.0_20180604.tar.gz”,一定要是 20180604 结尾的内核压缩包才行,如果用户使用的是老版本,则需要根据补丁文件添加代码。补丁包是光盘“iTOP-4412全功能版\20200624\iTOP-4412全功能版V4.0光盘资料\09_uboot&Linux内核扩展驱动补丁文件”目录下的压缩包“patch_superV4x0_lcd5x0.tar.gz”。
拷贝到内核源码目录下(一定要拷贝到内核源码的目录下),如下图所示,使用命令
“tar -vxf patch_superV4x0_lcd5x0.tar.gz”解压得到文件夹“patch_superV4x0_lcd5x0”, 文件夹中有 5 个补丁文件,1 个脚本文件。
进入解压得到的文件夹“patch_superV4x0_lcd5x0”,使用命令“chmod 777 script_patch_superV4x0_lcd5.sh”修改脚本权限。
接着使用“./script_patch_superV4x0_lcd5.sh u”命令,到这一步就打完补丁了,如下图所示。
打补丁的脚本只需要运行一次,如果多次运行则会增加额外的代码,会导致内核无法使用。用户在“iTop4412_Kernel_3.0_20180604.tar.gz”原始内核的基础上,运行了“./script_patch_superV4x0_lcd5.sh u”N 次,则可以使用命令“./script_patch_superV4x0_lcd5.sh r”同样也是 N 次,则可以返回到打补丁前的状态。