• 三、添加开发板及相应的驱动文件


    3.1 添加文件

    当前版本的 uboot 中肯定是已经没有 S3C24x0 这种老芯片了,我们需要找一份稍为 old 一点的 u-boot 将 s3c24x0 有关的文件都添加进来。

    文件或目录 作用
    ./arch/arm/cpu/arm920t/s3c24x0 s3c24x0 芯片相关的启动代码
    ./arch/arm/include/asm/arch-s3c24x0 s3c24x0 系列寄存器等定义
    ./board/samsung/smdk2410 开发板的初始化文件,之后会以这个文件为模板修改为 2440
    ./configs/smdk2410_defconfig 开发板配置文件,之后会进行修改,生成 2440的默认配置文件
    ./drivers/gpio/s3c2440_gpio.c 2440 的 gpio 驱动文件

    ./drivers/i2c/s3c24x0_i2c.c

    ./drivers/i2c/s3c24x0_i2c.h

    i2c 的驱动文件,暂时不需要移植过去,当前u-boot 中存在,不过代码有差异
    ./drivers/mmc/s3c_sdi.c S3C24xx SD/MMC 驱动
    ./drivers/mtd/nand/s3c2410_nand.c s3c2410 的 nand 驱动,移植到 ./drivers/mtd/nand/raw 目录下
    ./drivers/rtc/s3c24x0_rtc.c rtc 驱动,已经有了
    ./drivers/serial/serial_s3c24x0.c 串口驱动,先移植进来

    ./drivers/usb/gadget/s3c_udc_otg.c

    ./drivers/usb/gadget/s3c_udc_phy.c

    ./drivers/usb/gadget/s3c_udc_xfer_dma.c

    ./drivers/usb/host/ohci-s3c24xx.c

    ./drivers/usb/host/ohci-s3c24xx.h

    USB 驱动,先移植进来

    ./include/configs/smdk2410.h

    板载配置文件

    当前所添加的文件就是这些。下面进行开发板的添加。

    3.2 添加开发板

    3.2.1 修改板载文件

    cd board/samsung/
    mv smdk2410 jz2440
    cd jz2440
    mv smdk2410.c jz2440.c
    board/samsung/jz2440.c 修改

    在 arch/arm/include/asm/mach-types.h 中给我们定义了一个s3c2440 和 SMDK2440 的宏,这两个宏是板子的 ID,用这个两个宏都可以

     将 MACH_TYPE_SMDK2410 改为 MACH_TYPE_JZ2440,同时在此文件中定义一个宏 MACH_TYPE_JZ2440。

    3.2.2 添加板载编译配置

    修改 board/samsung 下的 Makefile 和 Kconfig:

     

    修改完此处后,需要在 arch/arm/Kconfig 中导入这个块板:

    修改完后,执行一下 make smdk2410_defconfig,然后执行 make menuconfig 查看是否可以找到板子,并修改相关配置:

    • Architecture select:架构选择,选择为 ARM architecture,即 ARM 架构
    • ARM architecture:arm 架构相关特性选择
      • Support for ARM SMC Calling Convention:关掉
      • ARM Generic Timer support:通用定时器支持,支持 armv8 和 armv7 以上,2440 不支持,关掉
      • ARM64 system support AArch32 execution state:此项关掉,我们不支持 64 位,所以不需要。
      • Target select:目标选择,选择我们的开发板,暂时没有我们的板子选择,可以查看 samsung 的板子都在哪里定义,然后添加进去
      • Use PSCI for reset and shutdown:armv8 架构支持,不需要,关掉。关掉这个后,可以对 Support for ARM SMC Calling Convention 选项进行操作,同样关掉。
    • General setup:通用选择
      • Automatically append version information to the version string:在版本字符串后,自动追加版本信息,不需要,关掉
    • delay in seconds before automatically booting:设置为 5
    • Command line interface:命令行接口设置
      • Shell prompt:改为 s3c24x0 ==>

    暂时先配置这些,当前的问题是找不到板子,继续修改 arch/arm/Kconfig,在目标集合中添加配置:

    在执行 make menuconfig:

    修改根目录下的 Makefile,添加交叉编译工具链:

    ./include/configs/smdk2410.h 修改,这是特定板载配置文件,非 make menuconfig 中的通用配置

    mv smdk2410.h jz2440.h

    修改 jz2440.h 文件,将带有 2410 字样的修改为 2440.

     

    3.2.3 修改芯片设置

    ./arch/arm/cpu/arm920t/Makefile

    3.2.4 make menuconfig 裁剪

    当前编译肯定有不少错误,所以先在 menuconfig 中做下裁剪,删除掉不需要的内容:

    • General setup:
      • Configure standard U-Boot features:此特性是专家级用户使用的,关掉
      • 64bit physical address support:64位的物理地址,2440 最大也支持 32位,关掉
    • Boot images:
      • Enable arch_fixup_memory_banks() call:在操作系统启动之前启用FDT内存映射同步。此功能可用于引导具有不同内存设置的操作系统,其中部分内存位置应用于不同的用途。暂时不需要,关掉。
    • Command line interface:
      • Boot commands:关掉下面几项
        • Support booting NetBSD (non-EFI) loader images
        • Support booting Plan9 OS images
        • Support booting RTEMS OS images
        • Support booting VxWorks OS images
        • Flattened Device Tree utility commands
        • imxtract
      • Compression commands :压缩命令,都关掉
      • Device access commands:dm - Access to driver model information 这个关掉
      • Shell scripting commands:shell 脚本命令,暂时不需要,关掉
      • Network commands:先关掉,移植网络的时候再开启
    • Device Tree Control:设备树,里面都不开启,暂时不用
    • Networking support:网络支持,暂时不用,关掉
    • Device Drivers:
      • Generic Driver Options:
        • Enable Driver Model:使能 DM 驱动模型,关掉
      • Enable Firmware driver support:固件驱动支持,用不上,先关掉
      • MMC Host controller Support:不需要,关掉
    • Library routines:
      • Compression Support:压缩支持,都关掉
      • Enable the FDT library:使能 FDT 库,设备树相关,关闭掉

    3.2.5 jz2440.c 裁剪

    USB 的先注释掉

    RTC 关掉:

     命令行配置先关闭:

    压缩方式:

    文件系统:

    3.3 编译测试修改

    3.3.1 invalid for SYS_TEXT_BASE

     SYS_TEXT_BASE(链接基地址)没有配置。既然存在于 .config 中,那么就可以通过 make menuconfig 进行配置。

    Boot images-->Text Base:设置为 0x00000000

    同时注释掉 include/configs/jz2440.h 中的 CONFIG_SYS_TEXT_BASE

    3.3.2 时钟获取函数没有

    这三个函数被定义在 arch/arm/cpu/arm920t/s3c24x0/speed.c 中,但是当前工程版本中未包含这几个函数,而且搜索发现这几个函数在很多地方都有用,我们将这几个函数定义在 include/common.h 中,以前的版本也是在这里定义的。

    3.3.3 重复配置定义

    多是一些配置宏重复定义,主要是 include/configs/jz2440.h 与 .config 中的定义有重复,注释掉 jz2440.h 中的重复定义,保留 .config 中的定义。同时 .config 中是否开启配置如下:

    • CONFIG_BOOTP_BOOTPATH:从 BOOTP/DHCP 服务器上请求并存储 “rootpath”,关掉。
    • CONFIG_BOOTP_GATEWAY:从 BOOTP/DHCP 服务器上请求并存储 “gatawayip”,关掉
    • CONFIG_BOOTP_HOSTNAME:从 BOOTP/DHCP 服务器上请求并存储 “hostname”,该名称可以用本地域名限定,也可以不限定,关掉
    • CONFIG_CMD_ELF:从内存启动 ELF/vxWorks 映像,配置保留开启
    • CONFIG_CMDLINE_EDITING:为交互式命令行输入操作启用编辑和历史记录功能,很显然要用
    • CONFIG_SYS_LONGHELP:在需要包含长帮助消息时定义。内存不足时不要设置此选项。保留
    • CONFIG_DISPLAY_CPUINFO:当U-Boot启动时,显示有关U-Boot正在运行的CPU的信息。调用函数print_cpuinfo()来执行此操作。保留
    • CONFIG_LZMA:压缩和解压缩方式,不需要,关掉此项需要先关掉 CONFIG_CMD_LZMADEC(Command line interface-->Compression commands-->lzmadec),在关掉 CONFIG_LZMA(Library routines-->Compression Support-->Enable LZMA decompression support)
    • CONFIG_NR_DRAM_BANKS:内存数量,General setup->Number of DRAM banks,设置为1,我们只有一个 SDRAM
    • CONFIG_ENV_SIZE:环境变量存储区的大小,Environment->Environment Size 设置 0x10000

    3.3.4 串口问题

    serial_s3c24x0.c 文件是移植进来的,还未做适配。

    修改 drivers/serial/Makefile

    修改 drivers/serial/Kconfig,文件的最后加上:

    make menuconfig:

    • Serial drivers
      • Default baudrate:波特率,设置为 115200
      • Specify the port number used for console:指定串口为终端
      • UART used for console:为终端的串口号,设置为 1
      • s3c24x0 serial:驱动,选中

    删除掉 jz2440.h 中串口的设置

     

    编译后出问题:

    查看代码后发现是 CONFIG_SERIAL1 没有了,代码依赖这个,而配置的 UART user for console 是 CONFIG_CONS_INDEX,所以要修改下 serial_s3c24x0.c 代码:

    3.3.5 未定义的函数

    3.3.5.1 get_timer_masked

     

     上面这个问题,其实都报的是一个问题,就是函数未申明,在 include/common.h 中申明此函数。

     3.3.5.2 hang()

    头文件未包含,包含一下 hang.h 即可。

    3.3.5.3 MACH_TYPE_SMDK2440

    在 jz2440.c 中,包含头文件 asm/mach-types.h

    3.3.5.4 cache 函数未定义

    函数存在于 arch/arm/lib/cache-cp15.c 中,很显然是定义了但是未申明,这个文件同样包含 include/common.h 文件,可以将申明放在这里。

    修改 include/common.h 文件:

    其他相似的 cache 错误如下:

    链接出错,可能是没有编译文件:如下

    CONFIG_SYS_ARM_CACHE_CP15 没有配置,.config 中如下:

    ARM architecture-->CP15 based cache enabling support 打开。

    3.3.5.5 flash_info_t 找不到

     需要包含头文件  flash.h。

    3.3.5.6 <asm/ppc.h> 的包含

    这个问题是因为我们开了宏 CONFIG_CMD_REGINFO 而出来的,关掉这个配置即可。

    .config 中无此配置宏,这个宏在 jz2440.h 中配置,注释掉。

    3.3.5.7 ubi 的问题

     当前不打算开启 ubi,所以需要关掉相关配置宏。

    CONFIG_CMD_UBI 和 CONFIG_CMD_UBIFS 在 jz2440.c 中被配置,注释掉。

    3.3.5.8 flash 的问题

    cfi 不知道是否支持,先在 jz2440.h 屏蔽掉此项编译 CONFIG_FLASH_CFI_DRIVER

    在jz2440.h 中屏蔽掉 CONFIG_ENV_IS_IN_FLASH

    3.3.6 BOARDDIR

    板子的路径错误了。搜索可以知道对应的是 CONFIG_BOARDDIR 这个配置宏,在看看 BOARDDIR 是如何取的:

    对应 VENDOR 和 BOARD 这两个参数,上面添加 3.3.2 中对 board/samsung 下的 Kconfig 要修改,因为板子放在 samsung 目录下。

  • 相关阅读:
    PAT乙级1038
    PAT乙级1033
    PAT乙级1032
    memset初始化数组的坑
    C/C++小课之数组名是什么
    PAT乙级1031
    Alpha阶段 第一次Scrum Meeting
    技术规格说明书
    功能规格说明书
    团队项目选择
  • 原文地址:https://www.cnblogs.com/kele-dad/p/13220557.html
Copyright © 2020-2023  润新知