Boot kernel from ufs:md0 gives error 22 on AVILA arm board
Monthadar Al Jaberi
monthadar at gmail.com
Mon Nov 14 17:37:54 UTC 2011
Hi,
I am having problems booting from ufs:md0 and hope you can help me.
I changed the default configuration file AVILA so that it boots from
MD instead of NFS.
options MD_ROOT #MD is a potential root device
options MD_ROOT_SIZE=4096
options ROOTDEVNAME=\"ufs:md0\"
I then generated a filesystem and embedded it inside kernel like this:
makefs -t ffs -B little -s 4m avila.img path/to/root
addr=($(strings -td kernel.bin | grep "MFS Filesystem" | awk '{print
$1}')) #calculate start and end address for mdroot
rootfs_start=${addr[0]}
rootfs_end=$((${addr[1]}+1))
echo "Generating kernel image for AVILA from ${rootfs_start} to ${rootfs_end}"
head -c ${rootfs_start} kernel.bin > kernel.new
cat avila.img >> kernel.new
tail -c +${rootfs_end} kernel.bin >> kernel.new
then from redboot:
load -b 0x00200000 kernel.new
go
and I get following error:
Trying to mount root from ufs:/dev/md0 []...
Mounting from ufs:/dev/md0 failed with error 22.
Trying to mount root from ufs:md0 []...
Mounting from ufs:md0 failed with error 22.
Loader variables:
Manual root filesystem specification:
<fstype>:<device> [options]
Mount <device> using filesystem <fstype>
and with the specified (optional) option list.
eg. ufs:/dev/da0s1a
zfs:tank
cd9660:/dev/acd0 ro
(which is equivalent to: mount -t cd9660 -o ro /dev/acd0 /)
? List valid disk boot devices
. Yield 1 second (for background tasks)
<empty line> Abort manual input
mountroot> ?
List of GEOM managed disk devices:
redboot/FIS directory redboot/RedBoot config redboot/RedBoot cfid0 md0
mountroot>
The md0 partition is there. And this is how I do it for the
RouterStation Pro and it works there.
When I debug the kernel code I see that the EINVAL is generated from
/*
* Common code for mount and mountroot
*/
static int
ffs_mountfs(devvp, mp, td)
struct vnode *devvp;
struct mount *mp;
struct thread *td;
{
...
/*
* Try reading the superblock in each of its possible locations.
*/
for (i = 0; sblock_try[i] != -1; i++) {
...
}
if (sblock_try[i] == -1) {
error = EINVAL; /* XXX needs translation */
goto out;
}
...
}
What am I doing wrong? any help is very appreciated.
Best regards
--
Monthadar Al Jaberi
More information about the freebsd-fs
mailing list