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

Posted kele-dad

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了添加开发板及相应的驱动文件相关的知识,希望对你有一定的参考价值。

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 目录下。

技术图片

以上是关于添加开发板及相应的驱动文件的主要内容,如果未能解决你的问题,请参考以下文章

Android驱动开发第五章

读“让开发板发出声音:蜂鸣器驱动”的心得

FPGA学习-2:开发板及Verilog介绍

Android深度探索(卷1)HAL与驱动开发 第八章 让开发板发出声音:蜂鸣器驱动 读书笔记

超高性价比!基于IMX8M mini的核心板及开发板

让开发板发出声音:蜂鸣器驱动