复旦微 FMQL Linux SDK实验(二)

接上篇

1.制作内核镜像

1.1.1 关于 image.ub

Linux 内核镜像文件有多种形式:Image,zImage,uImage 和 image.ub 等,先简 要介绍各文件的来历和区别。

在 Linux SDK 提供的内核源码“linux-4.14.55-fmsh”中,编译后会直接生成两个 文件:1)Image,内核镜像文件;2)zImage,压缩的内核镜像文件。然后,使用 u-boot中的 mkimage 工具,可以将 zImage 制作为 uImage。uImage 是 u-boot 专用的镜像文 件,它在 zImage 的前边加上一个 64 Byte 的“头”,描述了该内核的版本、加载位置、生成时间、大小等信息,除此以外和 zImage 没有区别。而 image.ub 则属于 mkimage工具支持的一种新格式。

随着 device tree 在 ARM 架构中的普及,为了更好地支持 device tree,u-boot 也 开始支持一种新的 image 格式——FIT uImage,FIT 表示 Flattened Image Tree。它利 用了 dts 的语法,生成的 itb 文件也和 dtb 文件类似。本文中制作的 image.ub 即是一 个 itb 类型的文件(但被命名image.ub)。

下文介绍内核镜像 image.ub 的制作时,涉及以下四个文件:

(1)ststem-top.dtb,设备树文件;

(2)zImage,压缩的内核镜像;

(3)rootfs.cpio.gz,压缩的根文件系统;

(4)fitImage.its 或 fitImage-ramdisk.its,制作 image.ub 的配置文件。

1.1.2 Linux 内核源码编译

Linux SDK 提供的 kernel 源码位于“FMQL-Linux-SDK.../linux-4.14.55-fmsh”目录 下,其中的文件如下图所示。
打开其中的 Makefile 文件,可以查看 kernel 的版本信息。

生成内核镜像 image 是制作 image.ub 的第一步。下边介绍编译内核的方法(注 意命令中的空格):

(1)在“FMQL-Linux-SDK/”目录下,打开命令行窗口,输入命令“source env.sh”, 设定环境变量。

(2)然后进入“FMQL-Linux-SDK.../ linux-4.14.55-fmsh”目录,打开命令行窗口, 输入命令“make fmsh_fmql_defconfig”,生成.config 配置文件(隐藏文件);

(3)输入命令“make -j20”,开始执行编译。

(4)编译完成后,生成内核镜像保存在“FMQL-Linux-SDK/linux-4.14.55-fmsh /arch/arm/boot”目录下,其中 zImage 格式的镜像将用于制作 image.ub。

1.1.3根文件系统的编译

Buildroot 是嵌入式开发领域内的,一个成套的嵌入式开发环境。Buildroot 常用 于定制自己的交叉编译器和根文件系统 rootfs。Linux SDK 提供 Buildroot 源码位于 “FMQL-Linux-SDK/buildroot-2018.02.3” 目录下,其中的文件如下图所示。

下边介绍编译 rootfs 的方法(注意命令中的空格):

(1)在“FMQL-Linux-SDK/”目录下,打开命令行窗口,输入命令“source env.sh”, 设定环境变量。

(2)然后进入“FMQL-Linux-SDK/ buildroot-2018.02.3”目录,打开命令行窗口, 输入命令“make fmsh_tiny_defconfig”,生成.config 配置文件(隐藏文件)。

(3)输入命令“make”,执行编译。

(4)编译完成后,如下图所示,“FMQL-Linux-SDK/buildroot-2018.02.3/output/ images”目录下将生成多种格式的 rootfs 文件。其中,rootfs.cpio.gz 将用于制作image.ub。

1.1.4制作 image.ub

制作 image.ub 前,首先编辑“FMQL-Linux-SDK”目录下的 env.sh,如下图所示, 本文中将 1.1.3 节编译的 rootfs 作为 ramdisk,因此“IMAGE_TYPE="ramdisk"”。

然后,因为“FMQL-Linux-SDK/conf”目录下的 its 配置文件会在“FMQL-Linux -SDK/images”目录下索引 system-top.dtb、zImage、rootfs.cpio.gz 等文件,所以需把 下图所示文件从各自的目录中复制到该目录下。其中,设备树文件 system-top.dtb 沿用之前章节的生成文件。

下边介绍制作 image.ub 的方法(注意命令中的空格):

(1)在“FMQL-Linux-SDK/”目录下,打开命令行窗口,输入命令“source env.sh”, 设定环境变量。

(2)然后输入命令“./build.sh image”,开始制作 image.ub。

(3)制作完成后,“FMQL-Linux-SDK/image”目录下将生成 image.ub 文件。

到此为止,我们的 Linux 内核镜像文件(其中还打包了设备树文件和根文件系统) 就准备好了。下面的教程将介绍如何制作 SD 卡用于启动 Linux。


1.1.5 本节注意事项

(1)关于 its 文件的编辑: image source file(its)的语法和 device tree source file(dts)的语法一样,并自 定义了一些特有的节点,诸如 images、configurations 等。如果需要,用户可以参考SDK 中的模板进行修改(注意备份)。
(2)关于配置节点(configurations): its 中可以将不同类型的二进制文件,根据不同的场景,形成多个配置组合,u-boot就能够以不同的配置来加载执行。


1.1.6使用 SD 卡启动 Linux

要在 FMQL 开发平台上运行 Linux 操作系统,需要提供存储启动程序的启动介 质,本文示例中以 SD 卡为启动介质。因此,需制作特殊格式的 SD 卡作为启动盘, 启动盘内的必备文件包括:

(1)BOOT.bin,由 bootrom 加载,并启动 FMQL 到 u-boot。

(2)image.ub,由 u-boot 加载,并启动 FMQL 到 Linux 操作系统。

1.1.7SD 卡分区

由于 BOOT.bin 必须放在 FAT32 分区,而 Linux 根文件系统不支持 FAT32,因 此 SD 卡需要分为两个分区(本文选择 FAT32 和 EXT4)。在 Ubuntu 操作系统中, 使用 Disks 工具为 SD 分区的步骤如下:

(1)将 SD 卡插入读卡器,再将读卡器插入电脑。打开虚拟机的移动设备连接 (虚拟机->可移动设备->你的读卡器->连接),使虚拟机内的 Ubuntu 系统识别出 SD卡。

(2)在 Ubuntu 搜索路径中输入 disk,会出现 Disks 图标。

(3)点击打开 Disks 工具,选中 32 GB Drive 设备(本节使用 32G 的 SD 卡)。

(4)点击“+”按钮,弹出 Create Partition 对话框,依次设置参数如下,分区大 小为 1GB,(点击 Next 后)Type 为 FAT,Name 也为 FAT。

(5)点击 Create 按钮执行分区,分区创建完成后如下图所示。

1.1.8复制启动文件到 SD 卡

1.1.9启动 Linux

SD 卡启动盘制作完成后,把 SD 卡插入开发板的 SD 卡插槽内。连接 USB 串口 线,设置 Bank1 电压为 1.8V,将启动方式拨码开关拨至 SD 启动模式。开发板上电 后,通过串口工具可以看到 Linux 操作系统的启动过程,运行 u-boot 后开始启动

Linux。至此完成 Linux 的启动,如下图所示

注:系统登录用户名为“root”,无密码。

以上两节内容是复旦微平台下制作BOOT.bin和image.ub文件的生成全过程,最终可以通过SD卡启动并进入Linux系统。以上参加黑金系列教程。部分属于个人见解,请各位大佬多多指教。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值