Marvell A38x 系列 SoC 开发笔记

1. 前言

限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。

2. 背景

本文基于几年前开发Marvell A38x系列SoC的笔记整理,或有错漏之处,请读者仔细分辨。

3. 编译和下载

3.1 交叉编译环境搭建

(1) 在PC或虚拟机中安装 ubuntu 14.04 lts server版本
(2) 在ubuntu系统下解压交叉编译器工具包 armv7-marvell-linux-gnueabi-hard-4.6.4_64K_i686_20150204.tar.bz2
 (3) 拷贝envsetup.sh 脚本到ubuntu系统

至此,交叉编译工具链已就绪。

3.2 编译

在第一次编译 u-boot, linux, busybox, mkyaffs2image 等之前,先编辑 envsetup.sh 脚本,将变量

CROSS_COMPILE
CROSS_COMPILE_BH

修改为步骤 3.1 中

armv7-marvell-linux-gnueabi-hard-4.6.4_64K_i686_20150204.tar.bz2 

解压后bin目录的路径。每次编译前,启动 shell 命令行,运行命令:

  . envsetup.sh

导入编译环境变量。

3.2.1 编译 u-boot

(1) 解压包 u-boot-2013.01-2015_T1.0-20170721.tar.bz2 到 ubuntu 系统;
(2) 启动shell命令行,切换到解压后的代码目录,运行命令 ./mkuboot.sh,然后会出现如下提示:
在这里插入图片描述
请根据目标板的情况输入1-6 中的一个数字。各选项的含义可参照下面的解释。如选项 1

1. nand-boot, ddr x 2(512MiB), rootfs=ramdisk

代表的含义是:

. 从NAND FLASH设备启动
. 2颗DDR,512MiB容量
. 内核根文件系统类型为ramdisk

其它选项的含义依此类推。
(3) 编译完成后会生成如下文件名按如下格式组织的 u-boot 程序

u-boot-a38x-ddrxDDR_NUM-ROOT_FS_TYPE-BOOT_DEVICE.bin

其中:

. DDR_NUM: 2, 4
. ROOT_FS_TYPE: ramdisk, yaffs2
. BOOT_DEVICE: nand, mmc

如在运行编译命令 mkuboot.sh 选择选项 1 是会生成如下2个bin文件
在这里插入图片描述
其中 u-boot-a38x-ddrx2-ramdisk-nand.bin 是最终要下载到目标板的程序。至此,u-boot 编译完毕。此处我们对编译脚本 build.pl 进行了修改,所以和原始厂家SDK的显示菜单不尽相同。

3.2.2 编译 Linux 内核

(1) 解压包文件 linux-3.10.70-2015_T1.1-20170721.tar.bz2 到 ubuntu 系统;
(2) 启动shell命令行,切换到解压后的代码目录,运行命令序列

make mrproper
make mvebu_lsp_defconfig
./mkkernel.sh

(3) 编译完成后在 output 目录下会生成两个文件
在这里插入图片描述
其中zImage是kernel镜像,armada-385-customer0.dtb为dts生成的dtb文件。
当前kernel对应的dts文件为arch/arm/boot/dts/armada-385-customer0.dts,在使用ramdiskyaffs2格式根文件系统时要对启动参数bootcmd作细微调整。
如果是ramdisk作为根文件系统:
在这里插入图片描述
如果是yaffs2作为根文件系统:
在这里插入图片描述
至此,linux 内核编译完成。

3.2.3 编译busybox + yaffs工具 + 制作根文件系统

3.2.3.1 编译 busybox

(1) 解压包文件 busybox-1.23.2-ramdisk+yaffs2-20170717.tar.bz2 到 ubuntu 系统;
(2) 启动 shell 命令行,切换到解压后的代码目录,运行命令序列

make
make install

(3) 编译后产生的文件在 _install 目录下,它们将作为根文件系统的一部分,包含 init脚本init 等重要程序。

3.2.3.2 编译yaffs/yaffs2根文件系统打包工具

(1) 解压包文件 yaffs2-20170717.tar.bz2 到 ubuntu 系统;
(2) 启动 shell 命令行,切换到解压后的代码目录 yaffs2/utils/,运行命令

make

(3) 编译后可看到目录下生成了mkyaffsimagemkyaffs2image 2个工具。
注:如果是制作ramdisk根文件系统,可忽略上面3个步骤。

3.2.3.3 制作根文件系统

(1) 启动 shell 命令行,切换到busybox源码根目录,运行命令

./mkramdisk.sh

制作ramdisk格式根文件系统,运行后在当前目录下生成文件 ramdisk.img
(2) 运行命令

./mkyaffs2.sh

制作yaffs2格式根文件系统,运行后在当前目录下生成文件rootfs.yaffs2

3.3 下载

3.3.1 搭建tftp下载服务器

3.3.1.1 Windows系统环境

运行 在这里插入图片描述并参照下图做出配置
在这里插入图片描述
下载文件路径是你要下载的文件目录,里面存放要下载到目标的程序如u-boot,kernel,dtb,rootfs等;另外,本机IP地址就是你运行tftp32.exe程序机器的ip地址。

3.3.1.2 Linux系统环境

tftp服务器搭建在网上有很多教材可以参考,在此不作赘述。

3.3.2 Windows下载文件(u-boot,kernel,dtb,rootfs)演示

要下载到目标板的程序包含4部分:

u-boot
kernel
dtb
rootfs

(1) 如下图连接开发板
在这里插入图片描述
(2) 在Windows启动tftp服务器程序并做好配置,如下图所示
在这里插入图片描述
(3) 启动串口工具如SecureCRT等,并连接配置好串口设备,波特率设置为115200
在这里插入图片描述
(4) 连通目标板电源,同时快速敲击键盘任意键,以停止u-boot auto-boot模式
在这里插入图片描述
在看到 Marvell>> 的提示符表示操作成功,否则请重新上电,直到看到类似上面图片所示画面为止。
(5) 配置u-boot tftp下载相关环境变量(非常重要)。首先请确保目标板能连接到tftp服务器,运行下列命令检查u-boot默认网络配置:如果serverip和你tftp服务器的ip不同,请用命令

setenv serverip xx.xx.xx.xx

将u-boot环境变量设置成你的tftp服务器ip。另外,ipaddr,netmask也要根据实际的网络情况配置成合适的值。总之,一定要确保tftp服务器和目标板能够正常通信
(6) 通过tftp下载程序。下载命令根据启动方式不同而有所不同:

#
# 如果从NAND启动时,下载命令序列如下:
#

# 下载u-boot
tftp 2000000 <u-boot-file-name>
nand erase 0 <u-boot-file-size>
nand write.e 2000000 0 <u-boot-file-size>
reset

# 下载kernel
tftp 2000000 <kernel-image-file-name>
nand erase 200000 <kernel-image-file-size>
nand write.e 2000000 200000 <kernel-image-file-size>

# 下载kernel dtb
tftp 2000000 <dtb-file-name>
nand erase 800000 <dtb-file-size>
nand write.e 2000000 800000 <dtb-file-size>

# 下载rootfs
tftp 2000000 <rootfs-image-file-name>
nand erase A00000 <rootfs-image-file-size>
nand write.e 2000000 A00000 <rootfs-image-file-size>

上面所有指定文件大小XXX-file-size的地方都是以字节为单位,指定的字节数可以大于或者等于实际的文件字节数,且所有的数字都是十六进制的。

#
# 如果从eMMC启动时,下载命令序列如下:
#

# 下载u-boot
tftp 2000000 <u-boot-file-name>
mmc write 0x2000000 0x0 <sectors-number-of-u-boot-file>

# 下载kernel
tftp 2000000 <kernel-image-file-name>
mmc write 0x2000000 0x1000 <sectors-number-of-kernel-image-file>

# 下载kernel dtb
tftp 2000000 <dtb-file-name>
mmc write 0x2000000 0x4000 <sectors-number-of-dtb-file>

# 下载rootfs
tftp 2000000 <rootfs-image-file-name>
mmc write 0x2000000 0x5000 <sectors-number-of-rootfs-image-file>

上面所有指定文件大小的sectors-number-of-XXX都是以sector为单位,文件大小字节数换算成sector的公式如下:

sectors-number-of-file = bytes-of-file / 512

如果相除的结果有余数,要把相除再加1,也就是把文件大小向上对齐到512个字节。同样,指定的sector数可以大于等于文件的实际sector。
上面给出的一般格式,下面给出2个具体的例子。如

# 从NAND启动、DDR x 4、yaffs2根文件系统,下载命令序列如下:

tftp 2000000 u-boot-a38x-ddrx4-yaffs2-nand.bin
nand erase 0 200000;nand write.e 2000000 0 200000
reset

tftp 2000000 zImage
nand erase 200000 600000
nand write.e 2000000 200000 600000

tftp 2000000 armada-385-customer0.dtb
nand erase 800000 200000
nand write.e 2000000 800000 200000
       
tftp 2000000 rootfs.yaffs2
nand erase A00000 2184000
nand write.yaffs2 2000000 A00000 2184000
       
reset
# 从eMMC启动、DDR x 2、ramdisk根文件系统

tftp 2000000 u-boot-a38x-ddrx2-ramdisk-mmc.bin
mmc write 0x2000000 0x0 0x1000
reset

tftp 2000000 zImage;mmc write 0x2000000 0x1000 0x3000
      
tftp 2000000 armada-385-customer0.dtb
mmc write 0x2000000 0x4000 0x1000
      
tftp 2000000 ramdisk;mmc write 0x2000000 0x5000 0x2000
      
reset

最后的reset命令是下载完成后重启系统并运行。
注意到多条u-boot命令是可以通过;分隔的形式一次性输入格式如下:

uboot-cmd-1[;uboot-cmd-2[;...]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值