JZ2440支持设备树

2018年12月9日 星期日

作者:赵俊超

C:\Users\LornYin\Documents\GitHub\socker_s\res\about.png

参考资料:在JZ2440上移植设备树—下:内核和设备树移植讓TQ2440也用上設備樹(1)

内核版本:linux-4.9.135

Uboot版本:u-boot-2016.11

Uboot使用我们上一次移植的支持2440的u-boot-2016

主要任务:

  1. 修改uboot、内核配置,开启设备树支持
  2. 修改设备树文件,支持基本硬件信息
  3. 修改nand flash驱动,从设备树获取资源
  4. uboot篇
  5. 我们先看看uboot源码目录下的README,搜索fdt
      1. 可以看见这里又关于fdt的介绍,我们定义了CONFIG_OF_LIBFDT 时就会开启fdt支持、bootm 命令也将自动更新fdt
  6. 我们在板级配置头文件vim include/configs/smdk2440.h里加入 #define CONFIG_OF_LIBFDT
  7. 重新编译、烧写uboot
    1. 这时我们使用bootm ${内核内存地址} – ${设备树内存地址}来启动,注意:内核内存地址 和设备树内存地址之间有个“-”。具体说明可以在uboot控制台输入#help bootm 查看
    2. 如图为启动信息,可以看见展开设备树的信息输出(设备树为我提前写好编译的s3c2440-jz2440.dtb ,后续会进行讲解)
  8. 内核篇
    1. 增加板级信息
      1. 修改 arch/arm/mach-s3c24xx/Kconfig
      2. 修改arch/arm/mach-s3c24xx/Makefile +77
      3. 在arch/arm/mach-s3c24xx/ 增加mach-jz2440-dts.c 内容如下

#include <linux/clocksource.h>

#include <linux/irqchip.h>

#include <linux/serial_s3c.h>

#include <asm/mach/arch.h>

#include <mach/map.h>

#include <plat/cpu.h>

#include <plat/pm.h>

#include “common.h”

 

 

static void __init jz2440_dt_map_io(void)

{

 

s3c24xx_init_io(NULL, 0);

 

}

 

static void __init jz2440_dt_machine_init(void)

{

 

s3c_pm_init();

 

}

 

static const char *const jz2440_dt_compat[] __initconst = {

“samsung,s3c2440”,

“samsung,jz2440”,

NULL

};

 

DT_MACHINE_START(S3C2440_DT, “Samsung S3C2440 (Flattened Device Tree)”)

.dt_compat = jz2440_dt_compat,

.map_io = jz2440_dt_map_io,

.init_irq = irqchip_init,

.init_machine = jz2440_dt_machine_init,

MACHINE_END

    1. 选中我们的配置
      1. #export ARCH=arm && export CROSS_COMPILE=arm-none-linux-gnueabi-
      2. # make s3c2410_defconfig
      3. #make menuconfig

System Type —>

SAMSUNG S3C24XX SoCs Support —>

[*] JZ2440 development board use dts

 

c)、编译、烧写、启动内核

c)、启动内核后发现并不能挂载文件系统,没没有打印mtd分区信息(具体分析方法待续),分析后发现是nand驱动没有支持dts,我们需要对nand 驱动进行修改

i.、 cp drivers/mtd/nand/s3c2410.c cp drivers/mtd/nand/of_s3c2410.c

ii.、 vim drivers/mtd/nand/Makefile

增加obj-y += of_s3c2410.o

      1. 修改of_s3c2410.c
      2. 主要修改s3c2440_nand_probe函数,把资源的获取换成设备树方式

d)、重新编译烧写内核

 

评论功能已经关闭!

superyin