我是在移植机器人操作系统ROS的时候,最后一步编译的出错,是因为物理内存不足,想采用swap交换内存,分配虚拟内存来解决问题.可是显示错误说该内核不支持swap,不得已只能自己重新编译内核,在内核配置单上选上swap的支持.
1 安装交叉编译器
安装教程见 Ubuntu15.10下安装arm交叉编译器并搭建编译环境以及hello.c的实现
2 编译U-Boot
下载 U-Boot 源代码并编译,注意分支是 nanopi2-lollipop-mr1:
git clone https://github.com/friendlyarm/uboot_nanopi2.git
cd uboot_nanopi2
git checkout nanopi2-lollipop-mr1
make s5p4418_nanopi2_config
make CROSS_COMPILE=arm-linux-
编译成功结束后您将获得 u-boot.bin,
3、准备 mkimage
编译内核需要用到 U-Boot 中的工具 mkimage,因此,在编译内核 uImage 前,您需要保证您的主机环境可以成功运行它。
你可以直接使用命令 sudo apt-get install u-boot-tools 来安装,也可以自己编译并安装:
cd uboot_nanopi2
make CROSS_COMPILE=arm-linux- tools
sudo mkdir -p /usr/local/sbin && sudocp -v tools/mkimage /usr/local/sbin
4、编译 Linux kernel
1 ) 下载Kernel源码
git clone https://github.com/friendlyarm/linux-3.4.y.git
cd linux-3.4.y
git checkout nanopi2-lollipop-mr1
第一步获取的时候超慢,还以为是网速问题,再试一次就好了.
NanoPi2内核所属的分支是nanopi2-lollipop-mr1
,在开始编译前先切换分支。
出现已经位于 'nanopi2-lollipop-mr1'
正常.
您的分支与上游分支 'origin/nanopi2-lollipop-mr1' 一致。
2)编译 Debian 内核
原内核默认支持 HDMI 输出,如果要编译支持 LCD 显示的内核,则需要修改内核配置,由于
若没有显示屏,在此不做处理:
touch .scmversion
make nanopi2_linux_defconfig // 选定内核配置,这里选择Linux
make menuconfig //编辑内核配置
此时出现了配置的图形界面。然后选择所需功能,我主要选择的是
General setup —> 常规安装选项
[*]Support for paging of anonymous memory (swap)
这个选项将使你的内核支持虚拟内存,也就是让你的计算机好象拥有比实际内存更多 多的内存空间用来执行很大的程序。默认是选择的。
另外,
Device Drivers –>
Graphics support –>
Nexell Graphics –>
LCD
[ ] HDMI
“`
再执行make uImage
编译成功结束后,
新生成的内核烧写文件为 arch/arm/boot/uImage 替换掉 SD 卡 boot 分区下的 uImage.hdmi。如果用的不是LCD则替换uImage
即执行更新内核:
sudo scp arch/arm/boot/uImage /media/daniel/boot1
到此重新编译的内核就可以支持swap功能了
补充说明说一下配置:
对每一个配置选项,用户有三种选择,它们分别代表的含义如下:
<>或[]——将该功能编译进内核
[]——不将该功能编译进内核
[M]——将该功能编译成可以在需要时动态插入到内核中的代码
出现错误 :
* Error during update of the kernel configuration.
make[2]: * [silentoldconfig] 错误 1
make[1]: * [silentoldconfig] 错误 2
CHK include/linux/version.hmake[1]: “include/asm-arm/mach-types.h”是最新的。
make: * 没有规则可以创建“include/config/kernel.release”需要的目标“include/config/auto.conf”。 停止
因为之前在root下选择功能的,现在又是普通用户下编译.所以建议不要用root了吧.