移植最新的linux4.9内核适配fs4412(samsung exynos4412平台验证通过)
1.源码下载
官网下载最新的linux4.9.9内核:
http://www.kernel.org/pub/linux/kernel/
第三个数字是修订版本号
2.解压
tar xvf linux-4.9.9.tar.xz
解压也需要时间,需要耐心等待,注意不要打断解压过程。
3.配置
进入内核源码目录:cd linux-4.9.9
3.1 修改编译工具链
打开顶层的Makefile:
vi Makefile
修改:
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
为:
ARCH ?= arm
CROSS_COMPILE ?= arm-none-linux-gnueabi-
注:如果不修改编译工具链,默认使用编译x86的gcc编译器,如果不想修改Makefile也可以执行make时添加 如:
make uImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
3.2 导入默认的配置
make exynos_defconfig
实际上是执行了:cp arch/arm/configs/exynos_defconfig .config
3.3 配置内核
执行
make menuconfig
修改指定内核的调试串口:
进入:Kernel hacking
->Kernel low-level debugging functions (read help!) 选择
---> Kernel low-level debugging port (Use Samsung S3C UART 2 for low-level debug) 打开选择uart2
选择这个调试串口很重要,否则打印不出内核启动的相关信息(这个地方配置找了半天才找到,exynos默认没有打开此功能,没有打开此处会发现内核打印信息停止在Starting kernel …处)
4.编译
4.1 编译uImage镜像
make uImage -j2 LOADADDR=0X40008000
-j2表示双线程编译
LOADADDR=0X40008000 表示指定内核的加载地址(注:没有此选项编译生成uImage会报错)
最后提示以下错误。
Kernel: arch/arm/boot/Image is ready
Kernel: arch/arm/boot/zImage is ready
multiple (or no) load addresses:
This is incompatible with uImages
Specify LOADADDR on the commandline to build an uImage
make[1]: *** [arch/arm/boot/uImage] 错误 1
make: *** [uImage] 错误 2
经过漫长的等待,结果显示如下: