Custom USB layout & sysinstall (Starting FIXIT)
none none
rank1seeker at gmail.com
Sat May 15 12:01:41 UTC 2010
On Sat, May 15, 2010 at 12:14 AM, Ken Smith <kensmith at buffalo.edu> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 5/14/10 1:16 PM, none none wrote:
>> I've read it, all.
>> What he is proposing, is about building our own image flavor. (make-memstick.sh)
>> Exactly, that act, is an issue here, as it confuses sysinstall's USB detection.
>
> This part of what you say confuses me. I use make-memstick.sh to build
> the .img files people are downloading and using to do installs with.
> So if you are using it correctly any machine that can use the .img
> files I build and we distribute should be able to use what you
> produce.
Ah, I was unclear. When I've put "make-memstick.sh", in bracket, I was
referring to similarity of steps.
Not to the usage, of actual make-memstick.sh script.
There are 2 types of customizations:
A) Content (All in UFS)
B) Layout (MBR, slices, boot code, bsdlabel,...)
make-memstick.sh script is limited only to customization of A), so I
am not using it.
And shell command which I utilize are far more complex.
I do A) and B) customizations, where B) is a culprit, that confuses sysinstall.
Focus on this:
Official FreeBSD memstick.img once 'dd'-ed appears as da0a
My edition appears as da0s2a ( because of me doing B) )
Once I turn on my machine, at boot time I select USB as a boot device.
Then: BIOS -> MBR of da0 -> slice 2 -> boot loader -> sysinstall
Now, while in sysinstall, I decide to go in Fixit mode.
When I select a USB device, I get an error msg:
"No USB devices found!"
Other parts of sysinstall, DO list ad4 (my HDD) and da0 (my USB stick)
correctly.
>> There are 2 remedies:
>> 1) After loader prompt, INSTEAD of starting sysinstall (as I don't
>> need it at all), immediately START Fixit
>> 2) Edit /usr/src/usr.sbin/sysinstall/devices.c, at the code lines,
>> posted below and compile sysinstall, so it could recognize USB device,
>> on non default USB img layout.
>>
>> I favor FIRST solution 1).
>
> There are issues with us doing (1) in a widespread way because there
> are hooks in sysinstall that check to see if it is running as init
> and it makes lots of decisions based on that. Booting off the install
> media results in sysinstall running as init, while if you run it later
> (post-install) it's not running as init.
So then 2)
/usr/src/usr.sbin/sysinstall/devices.c:
Code:
/*
* Find all devices that match the criteria, allowing "wildcarding" as well
* by allowing NULL or ANY values to match all. The array returned is
static
* and may be used until the next invocation of deviceFind().
*/
Device **
deviceFind(char *name, DeviceType class)
{
static Device *found[DEV_MAX];
int i, j;
j = 0;
for (i = 0; i < numDevs; i++) {
if ((!name || !strcmp(Devices[i]->name, name))
&& (class == DEVICE_TYPE_ANY || class == Devices[i]->type))
found[j++] = Devices[i];
}
found[j] = NULL;
return j ? found : NULL;
}
More information about the freebsd-hackers
mailing list