适用于迅为iTop-4412的Linux内核编译

设备和软件基本信息

开发板为迅为iTop-4412精英版(Elite),核心板采用SCP封装,1 GB内存。

开发计算机操作系统为Windows Server 2012 R2 Datacenter x64,在VMware Workstation Pro 15.5中运行64位Ubuntu 12.04.5 LTS系统。Ubuntu登录用户名为picsell-dois

为便于操作,已将iTop-4412随附光盘内的文件挂载共享目录到Ubuntu的/mnt/hgfs/Shared/目录内的“iTOP-4412精英版光盘资料”文件夹。

进入Root操作环境

为便于操作,进入Root操作环境。首先在Ubuntu终端中输入指令:

sudo passwd

指定Root密码,随后输入指令:

su

进入Root操作环境。

若无特殊说明,以下操作均在Root操作环境下进行。

配置所需的ARM编译器及环境变量

此处使用随附的arm-2009q3作为交叉编译工具。该编译工具用于编译uBoot、Linux Kernel和Android的源代码。

从iTop-4412随附光盘内复制arm-2009q3.tar.bz2文件到/usr/local/arm/内并解包:

cd /usr/local/
mkdir arm
cd arm
cp '/mnt/hgfs/Shared/iTOP-4412精英版光盘资料/02_编译器及烧写工具/arm交叉编译器/arm-2009q3.tar.bz2' ./
tar -vxf arm-2009q3.tar.bz2

配置环境变量:

sudo gedit /root/.bashrc

通过在行首添加井号(“#”)的方式注释掉先前添加的其他编译器环境变量行(即export PATH=$PATH:/usr/local/arm/…这样的行),并在文件末尾添加:

#Compiler path for uBoot, Kernel and Android
export PATH=$PATH:/usr/local/arm/arm-2009q3/bin

保存并退出,回到终端并更新环境变量:

source /root/.bashrc

若需检查是否变更成功,可在终端输入arm并多次按键盘的TAB键触发系统的命令提示,如果提示列表中出现arm-none-linux-gnueabi-****命令,则可以认为操作成功。

如果是64位Ubuntu系统,强烈推荐为arm-2009q3安装32位兼容环境:

sudo apt-get install lsb-core

同时,为了便于今后的操作,也可以使用exit命令临时退出Root环境、返回当前登录用户的操作环境,并采用和上面一致的方法更新当前用户的环境变量:

gedit ~/.bashrc
source ~/.bashrc

先导工作

前期工作需要借用Android 4.0.3的配置编译环境中的安装脚本,安装大量的程序包,但是,可以不执行安装Java的脚本:

cd /home/picsell-dois/
mkdir iTop4412
cd iTop4412
cp '/mnt/hgfs/Shared/iTOP-4412精英版光盘资料/02_编译器及烧写工具/tools/Android_JDK.tar.bz2' ./
tar -vxf Android_JDK.tar.bz2
cd Android_JDK
./install-devel-packages.sh

可以再次执行./install-devel-packages.sh来确保程序包安装完整。

对于笔者使用的Ubuntu 12.04.5 LTS系统,须重新安装xorg以及libgl1-mesa库,否则重启虚拟机后可能无法进入图形界面:

apt-get install xorg
apt-get install libgl1-mesa-glx:i386
apt-get install libgl1-mesa-dev

请注意,以上代码块中提供的三行apt-get install指令是针对笔者使用的Ubuntu 12.04.5 LTS系统的,目的是修复执行./install-devel-packages.sh(这个脚本是针对Ubuntu 12.04.2 LTS编写的)时由于程序包冲突而被破坏的图形环境,并安装编译所需的正确的库。

如果您使用的是Ubuntu 12.04.2 LTS系统,那么只需要执行./install-devel-packages.sh安装随iTop-4412光盘提供的脚本即可,千万不要执行上代码块中提供的三行apt-get install指令,否则您的操作系统将无法启动到图形界面。

最后,依次执行:

apt-get install gcc-4.4 g++-4.4 g++-4.4-multilib gcc-4.4-multilib
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 100
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 50
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 100
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 50
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.4 100
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.6 50

降低Ubuntu系统自带的GCC版本到4.4.7,在终端输入gcc -v指令并按回车键执行,即可检查GCC版本。

复制和展开Linux内核源代码

从这里开始可以退出Root操作环境,亦可继续留在Root操作环境。为便于操作以及后续代码修改,此处选择退出Root操作环境。

随后,复制Linux内核源代码并展开:

cd /home/picsell-dois/iTop4412/
mkdir LinuxKernel
cd LinuxKernel
cp '/mnt/hgfs/Shared/iTOP-4412精英版光盘资料/06_源码_uboot和kernel/iTop4412_Kernel_3.0_20200410.tar.gz' ./
tar -vxf iTop4412_Kernel_3.0_20200410.tar.gz
cd iTop4412_Kernel_3.0

修改内核配置及源代码

展开的目录中存在以config_for_字符串开头的文件,这些文件是根据不同的开发板配置预编的配置文件,通过cp命令将与您的设备符合的文件复制为名为.config的文件,即可将其设置为当前活动的内核配置文件:

cd /home/picsell-dois/iTop4412/LinuxKernel/iTop4412_Kernel_3.0/
cp config_for_android_scp_elite .config

如果需要以菜单形式调整内核设定,则执行:

make menuconfig

如果出现“Install ncurses(ncurses-devel) and try again”报错,则先安装libncurses5-dev:

sudo apt-get install libncurses5-dev

再重新执行:

make menuconfig

编译内核

配置和修改操作完毕后,在终端执行:

make zImage

开始编译Linux内核。编译完成后得到的zImage文件位于/home/picsell-dois/iTop4412/LinuxKernel/iTop4412_Kernel_3.0/arch/arm/boot/目录内。

it
除非特别注明,本页内容采用以下授权方式: Creative Commons Attribution-ShareAlike 3.0 License