a10 linux 烧写,A10/A20 Bootloader加载过程分析

上面罗嗦了这么多,其实就是为了将uboot和kernel烧写到TF卡上并能够启动,OK,让我们先从分区开始:

A20 芯片上电启动的时候,会读取SD卡最前面的 1M 内容,从而得到 bootloader,所以我们需要把 u-boot 写到SD卡的前1M区间。

其中详细的SD卡布局如下:

起始

大小

用途

0

8KB

存放分区表等内容

8

24KB

SPL loader

32

512KB

u-boot

544

128KB

environment

672

352KB

保留

1024

-

用于剩余分区

接下来,我们开始使用fdisk进行分区(由于sfdisk对部分TF不兼容,故除非你真的知道怎么用sfdisk,否则不要使用):

将TF卡插到电脑上并确认设备名,为不至于混淆,我们使用sdX代替,您需要根据自己的情况修改,如sdb:

card=/dev/sdX dd if=/dev/zero of=${card} bs=1M count=1 # 把SD卡前1M的区域填充为0,预留给 u-boot sfdisk -R ${card} # 重新读取${card} fdisk ${card} #使用fdisk进行分区

具体分区步骤如下:

建立第一个分区

root@kubuntu:~/src/u-boot-sunxi# fdisk ${card}

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel with disk identifier 0x911332e8.

Changes will remain in memory only, until you decide to write them.

After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n #键入n然后回车

Partition type:

p primary (0 primary, 0 extended, 4 free)

e extended

Select (default p): #直接回车

Using default response p

Partition number (1-4, default 1): #直接回车

Using default value 1

First sector (2048-15278079, default 2048): #直接回车

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-15278079, default 15278079): +64M #键入+64M后回车,即分区大小为64M

建立第二个分区

Command (m for help): n #键入n然后回车

Partition type:

p primary (1 primary, 0 extended, 3 free)

e extended

Select (default p): #直接回车

Using default response p

Partition number (1-4, default 2): #直接回车

Using default value 2

First sector (133120-15278079, default 133120): #直接回车

Using default value 133120

Last sector, +sectors or +size{K,M,G} (133120-15278079, default 15278079): #直接回车,即第二个分区使用全部剩余空间

Using default value 15278079

接下来指定分区类型:

Command (m for help): t #键入t然后回车

Partition number (1-4): 1 #键入1然后回车,即指定第一个分区

Hex code (type L to list codes): c #键入c然后回车,即指定第一个分区为vfat

Changed system type of partition 1 to c (W95 FAT32 (LBA))

Command (m for help): w #键入w然后回车,保存分区表

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

格式化分区:

mkfs.vfat ${card}1 mkfs.ext4 ${card}2 #需要稍等片刻

然后写入bootloader:

cd $WORK_DIR/u-boot-sunxi dd if=u-boot-sunxi-with-spl.bin of=$card bs=1024 seek=8

最后安装内核 uImage,设置启动参数:

mount ${card}1 /mnt mkdir /mnt/boot cp $WORK_DIR/linux-sunxi/arch/arm/boot/uImage /mnt/boot cp $WORK_DIR/sunxi-boards/sys_config/a20/script.bin /mnt/boot cp $WORK_DIR/boot.scr /mnt/ sync && umount /mnt

至此,启动到linux内核的工作已经完成,接下来我们就可以观看linux内核启动过程、进行内核调试了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值