全志SOC的方案,他们的启动卡分区表采用的是MBR分区表。我们通过如下的制作过程可以看出一二。

从sunxi论坛上( http://linux-sunxi.org/Bootable_SD_card )来看全志方案的卡启动固件制作过程。首先看一下卡的存储分布图:

start size usage
0 8KB Unused, available for partition table etc.
8 24KB Initial SPL loader
32 512KB U-Boot
544 128KB environment
672 352KB reserved
1024 - Free for partitions

从这个分布图看,可以看到前8K空间保留用来放分区表。作为MBR分区方式,那么其实它的分区表只存在第一个扇区,也就是前512Byte中,所以这8K大部分空间是没有用到的。

真正的分区空间是从1M的位置开始,所以我们在使用sfdisk分区时,第一个分区起始地址应该为1M。保留了1M的空间给予上面这些特殊的需要。

对于在分区中的空间,是可以被我们的pc识别的,我们可以通过mount挂载相应的设备文件来直接拷贝进去,但是对于保留的这1M空间,我们只能使用dd命令配合seek选项来写入数据了。

首先我们清楚sd上的数据:
1.如果想清除前1M特殊用途的空间,如下所示:

dd if=/dev/zero of=${card} bs=1M count=1

2.如果只想清楚分区表,我们看到其实只保留了前1K的空间:

dd if=/dev/zero of=${card} bs=1k count=1023 seek=1

烧写spl bootloader,烧入到8K的地方:

dd if=spl/sunxi-spl.bin of=${card} bs=1024 seek=8

烧写uboot,烧入到32K的地方:

dd if=u-boot.bin of=${card} bs=1024 seek=32

SD卡分区:

sfdisk -R ${card}
cat <<EOT | sfdisk --in-order -L -uM ${card}
1,16,c
,,L
EOT

由此可见,分区空间是从1M开始算起的,1M到16M的空间作为boot分区。采用sfdisk为MBR分区,分区表如下所示:

/dev/sdb1 1 18 18 17019 c W95 FAT32 (LBA)
/dev/sdb2 19 1019 1001 946445+ 83 Linux
/dev/sdb3 0 - 0 0 0 Empty
/dev/sdb4 0 - 0 0 0 Empty

拷贝内核和内核配置到boot分区1,最新的内核配置应该已经改成dtb了。

mount ${card}${p}1 /mnt/
cp linux-sunxi/arch/arm/boot/uImage /mnt/
cp sunxi-boards/sys_config/a10/script.bin /mnt/
cp boot.scr /mnt/
cp uEnv.txt /mnt/
umount /mnt/

其中的boot.scr和uEnv.txt这两个是用来给uboot读取启动参数用的,script.bin是kernel中的配置项,类似dts的功能。

配置uboot的启动参数:

setenv bootargs console=ttyS0,115200 noinitrd root=/dev/mmcblk0p2 init=/sbin/init rootwait panic=10 ${extra}fatload mmc 0 0x43000000 boot/script.binfatload mmc 0 0x48000000 boot/uImagebootm 0x48000000

根据boot.cmd生成u-boot能够读取的boot.src文件

mkimage -C none -A arm -T script -d boot.cmd boot.scr

uEnv.txt的内容,用来读取boot.scr

bootenv=boot.scrloaduimage=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}mmcboot=echo Running boot.scr script from mmc ...; source ${loadaddr}

制作rootfs,解压到分区2:

Using rootfs tarball
mount ${card}${p}2 /mnt/
tar -C /mnt/ -xjpf my-chosen-rootfs.tar.bz2
umount /mnt

全志方案卡启动固件制作原理相关推荐

  1. 基于阿尔法开发板构建卡启动固件

    基于阿尔法开发板构建卡启动固件 1.前言 2.u-boot 2.1 u-boot修改 2.2 u-boot编译 2.3 u-boot烧录 3.kernel 3.1 kenrel编译 4.rootfs ...

  2. linux sd卡启动盘制作工具,fedora liveusb creator linux u盘启动盘制作工具

    fedora liveusb creator是一款专业的linux u盘启动盘制作工具,使用这款linux启动盘制作工具您可以制作用于安装linux系统的U盘启动盘,也可以实现把linux系统安装到U ...

  3. linux sd卡启动盘制作工具,使用Etcher来创建可启动盘(可引导的USB盘或SD卡)的方法...

    本文介绍在 Linux 下安装 Etcher 的方法及使用 Etcher 来创建可启动盘,即创建一个可引导的 USB 盘或 SD 卡.同时它还能在 Windows.MacOS 上使用,Etcher L ...

  4. SD卡启动盘制作软件

    下载地址:http://www.roadkil.net/program.php?ProgramID=24 转载于:https://www.cnblogs.com/wangf/archive/2013/ ...

  5. tf卡运行linux,I.MX6UL TF卡启动Linux的实现

    I.MX6UL TF卡启动Linux的实现 [复制链接] 1 TF卡启动Linux的原理1.1 TF卡简介TF卡又称T-Flash卡.全名:[TransFLash]又名[Micro SD],由摩托罗拉 ...

  6. Rockchip | 使用SD卡启动或升级固件到本地存储

    1 简介 Rockchip 现将 SD 卡划分为常规 SD 卡,SD 升级卡,SD 启动卡,SD 修复卡.可以通过瑞芯微创建升级磁盘工具将镜像文件下载到 SD 卡内,制作不同的卡类型. 2 分类 2. ...

  7. imx533 配置 制作SD卡启动文件系统

    制作SD卡启动文件系统 [1]对SD卡分区 按飞思卡尔文档列出的分区表用fdisk分区: Partition Type/Index Name Start Offset Size File System ...

  8. 第十一天: SD卡原理分析及SD卡启动详解

    主流的外存设备 内存和外存的区别: 一般是把这种(random access memory,随机访问存储器,特点是任意字节读写,掉电丢失)叫内存,把ROM(read only memory,只读存储器 ...

  9. Jetson-nano:制作TF卡启动

    旧Nano可以直接导入镜像至TF卡,然后插入卡槽即可启动系统. 但目前旧的英伟达已经停止生产底板,现在市面上都是带emmc的核心板,底板是由其他厂商进行扩容自行生产的,因为官方自带的emmc只有16G ...

最新文章

  1. mockito_Eclipse的Mockito模板
  2. 为什么PUE只说明了数据中心能效的一部分?
  3. python PyQt5 slot插槽(pyqtSignal、pyqtSlot)
  4. 如何修改数据库表或存储过程的所有者
  5. 安装mariadb以及允许远程访问
  6. php链接mysql验证用户登录,PHP连接mysql验证用户名是否存在
  7. 使用phantomjs操作DOM并对页面进行截图需要注意的几个问题
  8. [未来的购碟指南]送给那些以后想收藏真人电影DVD的菜鸟们
  9. Qt 设置应用程序开机自启动
  10. saas 困难_将不可信的Javascript作为SaaS运行非常困难。 这就是我驯服恶魔的方式。...
  11. php 发送文本 设置头,php中header设置常见文件类型的content-type
  12. quilt - 制作patch的工具
  13. cannot be applied to
  14. 多边形的定义为什么要强调封闭图形_11.3.1 多边形讲解.ppt
  15. 敏捷无敌之橄榄球与软件开发(9)
  16. tushare获得股票数据后进行数据合并
  17. CS5263设计原理图|CS5263设计DP转HDMI电路参考|CS5263中文说明
  18. 【若依】开源框架学习笔记 07 - 登录认证流程(Spring Security 源码)
  19. [转]微服务与Docker
  20. 有关于Boolean的使用

热门文章

  1. 第一个神经网络TensorFlow
  2. Cow Frisbee Team S(变相的01背包)
  3. Spotlight1 一词多义(Polysemy)
  4. [测试十年]第一年要get哪些技能?
  5. 编程范式(斯坦福大学)学习笔记《十二》
  6. Android 4.0 事件输入(Event Input)系统
  7. 百度api识别营业执照
  8. win7怎样设置屏保时间 win7系统设置屏保的方法
  9. 购物网站制作——顶部导航栏(index.html)
  10. 50%的多次死亡问题