1、安装交叉编译器
方式一(未成功):sudo apt-get installgcc-arm-linux-gnueabihf
安装成功后,输入:arm-linux-gnueabihf-gcc -v
2、获取CubieBoard2的内核源码
可以使用命令:git clone https://github.com/cubieboard2/linux-sunxi
也可以直接打开上面的链接,点击右侧的"clone or downloa"--->"download zip",将内核源码下载到PC桌面,然后拷贝到虚拟机中。
解压:sudo unzip linux-sunxi-sunxi-3.4.zip
3、编译内核
切换到管理员模式:sudo su
3.1 生成配置文件
有两种方式:
a、修改内核源码根目录下的Makefile,令ARCH=arm,CROSS_COMPILE=arm-linux-gnueabihf-。然后执行命令:make sun7i_defconfig
b、直接执行命令: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun7i_defconfig
出现错误:recipe for target 'scripts/basic/fixdep' failed
解决办法:sudo apt-get install build-essential
3.2 执行配置文件
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
3.3 开始编译内核
执行命令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 uImage modules dtbs
如果是多处理系统可以添加选项-jn ,n为数字,表示多处理器的数量,可以加快编译速度。
出现错误:include/linux/compiler-gcc.h:103:30: fatal error: linux/compiler-gcc5.h: 没有那个文件或目录 compilation terminated.
在网上搜索后发现原因:gcc版本太高,而编译内核版本太低。解决办法,要么将gcc降级,要么升高内核源码版本,还有的说自行下载compiler-gcc5.h。
下载compiler-gcc5.h文件,并将其拷贝到源码根目录下的 include/linux 目录,再次编译。
出现错误: `return_address'被多次定义
解决办法:
1)、在内核源码根目录下,执行命令:sudo vim arch/arm/include/asm/ftrace.h,找到如图所示代码的所在行,将 extern 替换为 static。
2)、在内核源码根目录下,执行命令:sudo vim arch/arm/kernel/return_address.c,找到如图所示代码的所在行,将以下代码全部注释或删除。
继续编译。
出现错误:gcc:没有那个文件或目录
解决办法:sudo apt-get install lsb-core
出现错误:缺少libstdc++.so 6
解决办法:
sudo apt-get install lib32stdc++6
sudo apt-get install libc6-i386
sudo apt-get install libstdc++6
4 测试
5 参考文章
关于arch/arm/kernel/return_address.c:66:7: error: redefinition of ‘return_address'的错误解决方案