0
richardk

u-boot question: boot 2nd partition?

Recommended Posts

I'm trying to create a microSD card to boot Armbian, but first would be inserted into a Windows laptop to edit some configuration.  To make the microSD show up in Windows, the first partition must be a FAT partition, and so Linux would be ext4 partion 2.

 

I suspect I'll need to put the /boot partition on the FAT volume, with directions to load from mmcblk1p2.  In case it matters, this is a Rock64 without emmc.

 

I've just started this research, but I'd be grateful for any u-boot-savvy person's help here.  Thanks.

 

Share this post


Link to post
Share on other sites

Okay, make sure to set BOOT flag on the second partition.

 

Adding setenv rootdev "/dev/mmcblk0p2" to armbianEnv.txt to the second partition's /boot/armbianEnv.txt doesn't work.

 

Moving on...

 

Share this post


Link to post
Share on other sites

Wow, copying the contents of p2:/boot in ext4 to p1:/boot in FAT is worse.

 

Gets into a loop...

SdmmcInit=2 0
BootCapSize=0
UserCapSize=0MB
FwPartOffset=2000 , 0
SdmmcInit=2 0
BootCapSize=0
UserCapSize=0MB
FwPartOffset=2000 , 0
SdmmcInit=2 0 ...

 

Share this post


Link to post
Share on other sites
22 minutes ago, richardk said:

Adding setenv rootdev "/dev/mmcblk0p2" to armbianEnv.txt to the second partition's /boot/armbianEnv.txt doesn't work.

armbianEnv.txt is not a script, it is environment. So change the following :

rootdev=UUID=69c4417e-e866-4934-8625-bd5fed6f21d5

to :

rootdev=/dev/mmcblk0p2

 

Share this post


Link to post
Share on other sites

Well, firstly don't overwrite your u-boot sectors with a fat partition.  Nothing works.  :(

 

Secondly: rootdev=/dev/mmcblk0p2 isn't it either.  I get:

 

This seems like the relevant portion of the log:

 

mmc1 is current device
Scanning mmc 1:2...
Found U-Boot script /boot/boot.scr
2949 bytes read in 21 ms (136.7 KiB/s)
## Executing script at 00500000
Boot script loaded from mmc 1
reading /boot/uInitrd
** Unable to read file /boot/uInitrd **
reading /boot/Image
** Unable to read file /boot/Image **
reading /boot/dtb/rockchip/rk3328-rock64.dtb
** Unable to read file /boot/dtb/rockchip/rk3328-rock64.dtb **

It appears it found /boot/boot.scr, but then didn't find other files.

 

Oh - maybe it's mmcblk1p2...

 

Share this post


Link to post
Share on other sites

Sigh, no change using /dev/mmcblk1p2.

 

Found U-Boot script /boot/boot.scr
2949 bytes read in 21 ms (136.7 KiB/s)
## Executing script at 00500000
Boot script loaded from mmc 1
reading /boot/uInitrd
** Unable to read file /boot/uInitrd **
reading /boot/Image
** Unable to read file /boot/Image **
reading /boot/dtb/rockchip/rk3328-rock64.dtb
** Unable to read file /boot/dtb/rockchip/rk3328-rock64.dtb **

 

Share this post


Link to post
Share on other sites

It loos like maybe "first partition" is coded into boot.scr...

 

# get PARTUUID of first partition on SD/eMMC the boot script was loaded from
if test "${devtype}" = "mmc"; then part uuid mmc ${devnum}:1 partuuid; fi
 

I'll need to edit boot.cmd and recompile boot.scr.

 

Share this post


Link to post
Share on other sites

Well, progress made.

 

Added to boot.cmd:

 

setenv partnum "2"

setenv devnum "${devnum}:${partnum}"

 

After that, the kernel image gets loaded, but shortly thereafter it resets and boots again...

[   44.604791] reboot: Restarting system
 

 

The device tree seems to be unresolved...

 

Scanning mmc 1:2...
Found U-Boot script /boot/boot.scr
3048 bytes read in 21 ms (141.6 KiB/s)
## Executing script at 00500000
Boot script loaded from mmc 1:2
171 bytes read in 18 ms (8.8 KiB/s)
8018124 bytes read in 394 ms (19.4 MiB/s)
20498944 bytes read in 959 ms (20.4 MiB/s)
51131 bytes read in 33 ms (1.5 MiB/s)
293 bytes read in 38 ms (6.8 KiB/s)
Applying kernel provided DT overlay rockchip-spi1.dtbo
2698 bytes read in 32 ms (82 KiB/s)
Applying kernel provided DT fixup script (rockchip-fixup.scr)
## Executing script at 39000000
libfdt fdt_path_offset() returned FDT_ERR_NOTFOUND
libfdt fdt_path_offset() returned FDT_ERR_NOTFOUND

## Loading init Ramdisk from Legacy Image at 04000000 ...
   Image Name:   uInitrd
   Image Type:   AArch64 Linux RAMDisk Image (gzip compressed)
   Data Size:    8018060 Bytes = 7.6 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 01f00000
   Booting using the fdt blob at 0x1f00000
   Loading Ramdisk to fc75b000, end fcf0088c ... OK
   reserving fdt memory region: addr=1f00000 size=72000
   Loading Device Tree to 00000000fc6e6000, end 00000000fc75afff ... OK

Starting kernel ...
 

Share this post


Link to post
Share on other sites

SUCCESS.   I've got it booting the second partition.  :)

 

Lessons:

 

armbianEnv.txt really wants UUID=.  If you make a new partition, make sure to match UUIDs.

 

Edit boot.cmd; find:

   echo "Boot script loaded from ${devtype} ${devnum}"
 

Before that line, add:

   setenv partnum "2"
   setenv devnum "${devnum}:${partnum}"

 

That's how it's working.

 

I thought I could adjust so that it took partnum=2 from armbianEnv.txt (and move the new setenv devnum down after armbianEbv.tct is loaded).  I don't know why that didn't work; I might have messed something else up.

 

Anyway, I'm good to go.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
0