S5PV210开发板移植Linux4.4.1内核并使用设备树传参

-----最近手头之前学习使用的是九鼎的X210开发板,使用的是S5PV210 SOC,目前210 的学习资料也比较丰富,易于学习。可是目前最多的资料都是基于Linux2.6.35.7这个内核版本来学习的。今天下载了Linux4.4.1版本的内核,发现该版本上使用设备树传参已经很好的支持了S5PV210,特此打算移植4.4.1版本的内核并且使用设备树传参来启动内核。
说干就干,从官网下载Linux4.4.1内核,原来是使用三星官方的2009q3这套交叉编译工具链,先使用该工具链编译内核,后续有问题的话再换工具链。
首先设置内核源码目录下的Makefile.修改ARCH 和CROSS_COMPILE:
ARCH ?= arm
CROSS_COMPILE ?= /usr/local/arm/2009q3/bin/arm-linux-gunabie-

ARCH		?= $(SUBARCH)
CROSS_COMPILE	?= $(CONFIG_CROSS_COMPILE:"%"=%)
ARCH		?= arm
CROSS_COMPILE	?= /usr/local/arm/2009q3/bin/arm-linux-gunabie-
# Architecture as present in compile.h
UTS_MACHINE 	:= $(ARCH)
SRCARCH 	:= $(ARCH)

然后执行make s5pv210_defconfig
make

这时候发现报错误:

/tmp/ccgcmPjb.s: Assembler messages:
/tmp/ccgcmPjb.s:243: Error: garbage following instruction -- `dsb nshst'
/tmp/ccgcmPjb.s:251: Error: garbage following instruction -- `dsb nsh'

解决办法:
make menuconfig 后取消该配置:

Power management options  --->
	[] Suspend to RAM and standby

然后继续make,编译一会后报错:

garbage following instruction - 'dmb ish'

此时上网查了很多博客,发现是交叉编译器的问题,可能是版本太低。然后就按照网上的说法安装新版本工具链:

sudo apt-get install gcc-arm-linux-gnueabi

然后重新修改Makefile中的编译工具链:
(注意此时要把原来2009q3的工具链环境变量导出路径从/etc/profile下删除,不然可能会有冲突,还是识别旧版本工具链)

CROSS_COMPILE	?= /usr/local/arm/2009q3/bin/arm-linux-gunabie-

然后重新make,过一会发现编译成功。在arch/arm/boot/目录下生成了zImage.
进入arch/arm/boot/dts/目录下发现和S5PV210相关的设备树文件已经被编译成了dtb文件。
以后修改设备树文件我们可以直接make dtbs就可以生成dtb文件,不用编译整个内核。

我们可以使用dtc工具将dtb文件反编译生成完整的dts文件,方便查看。
反编译指令如下:

dtc -I dtb -O dts s5pv210-smdkv210.dtb > 210.dts

如果指令输入失败可以安装dtc工具:

sudo apt-get install device-tree-compiler

至此,内核编译成功,并且得到完整的devices tree参数。下一步使用uboot 启动内核,遇到问题在解决 。

发布了27 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_24622489/article/details/86701437