NanoBSD config script for RPI2

Karl Denninger karl at denninger.net
Sun Feb 5 21:22:58 UTC 2017


On 2/5/2017 10:53, Karl Denninger wrote:
> On 2/4/2017 15:02, Mark Millard wrote:
>> On 2017-Feb-4, at 10:56 AM, Karl Denninger <karl at denninger.net
>> <http://denninger.net>> wrote:
>>
>>> On 2/4/2017 10:38, Warner Losh wrote:
>>>> On Sat, Feb 4, 2017 at 5:55 AM, Karl Denninger <karl at
>>>> denninger.net <http://denninger.net>> wrote:
>>>>> It fails here during image create....
>>>>>
>>>>> Populating `/pics/CrossBuild/embedded/rpi2/_.s2'
>>>>> Image `/pics/CrossBuild/embedded/rpi2/_.s2' complete
>>>>> + [ -n s1 ]
>>>>> + eval 's1=fat16b'
>>>>> + s1=fat16b
>>>>> + out=/pics/CrossBuild/embedded/images/_.disk.image.HD-MCP
>>>>> + mkimg -a 3 -s mbr -p 'fat16b:=/pics/CrossBuild/embedded/rpi2/_.s1' -p
>>>>> 'freebsd
>>>>> :=/pics/CrossBuild/embedded/rpi2/_.s2' -p
>>>>> 'freebsd:=/pics/CrossBuild/embedded/rp
>>>>> i2/_.s3' -o /pics/CrossBuild/embedded/images/_.disk.image.HD-MCP
>>>>> mkimg: invalid option -- a
>>>>> mkimg: error: unknown option
>>>>>
>>>>> usage: mkimg <options>
>>>>>    options:
>>>>>        --formats       -  list image formats
>>>>>        --schemes       -  list partition schemes
>>>>>        --version       -  show version information
>>>>>
>>>>>        -b <file>       -  file containing boot code
>>>>>        -c <num>        -  capacity (in bytes) of the disk
>>>>>        -f <format>
>>>>>        -o <file>       -  file to write image into
>>>>>        -p <partition>
>>>>>        -s <scheme>
>>>>>        -v              -  increase verbosity
>>>>>        -y              -  [developers] enable unit test
>>>>>        -H <num>        -  number of heads to simulate
>>>>>        -P <num>        -  physical sector size
>>>>>        -S <num>        -  logical sector size
>>>>>        -T <num>        -  number of tracks to simulate
>>>>>
>>>>>    formats:
>>>>>        qcow    -  QEMU Copy-On-Write, version 1
>>>>>        qcow2   -  QEMU Copy-On-Write, version 2
>>>>>        raw     -  Raw Disk
>>>>>        vhd     -  Virtual Hard Disk
>>>>>        vhdf    -  Fixed Virtual Hard Disk
>>>>>        vmdk    -  Virtual Machine Disk
>>>>>
>>>>>    schemes:
>>>>>        apm     -  Apple Partition Map
>>>>>        bsd     -  BSD disk label
>>>>>        ebr     -  Extended Boot Record
>>>>>        gpt     -  GUID Partition Table
>>>>>        mbr     -  Master Boot Record
>>>>>        pc98    -  PC-9800 disk partitions
>>>>>        vtoc8   -  SMI VTOC8 disk labels
>>>>>
>>>>> Is the "-a" flag attempting to set the active partition?  It appears
>>>>> there's no option to do that in mkimg...
>>>> Install a newer mkimg:
>>>>
>>>> Revision 307550 - (view) (download) (annotate) - [select for diffs]
>> https://svnweb.freebsd.org/base/?pathrev=312669 shows that
>> -r3125699 is from head.
>>
>> Looking around: stable/11 has not been updated for its mkimg. only
>> head has -a added at this point.
>>
>>>> Modified Tue Oct 18 05:43:12 2016 UTC (3 months, 2 weeks ago) by imp
>>>> File length: 3730 byte(s)
>>>> Diff to previous 307544
>>>>
>>>> Add a new flag to mkimg (-a num) to specify the active partition for
>>>> those partitioning schemes that have this concept. Implement it as an
>>>> override for mbr's setting 0x80 in the flags for the first partition
>>>> when we have boot code.
>>>>
>>>> Differential Revision: https://reviews.freebsd.org/D4403
>>>>
>>>> Though maybe I should try to add it to the bootstrap tools so I can
>>>> use a new one after the build.
>>>>
>>>> Warner
>>>>
>>> root at NewFS:/disk/karl # uname -v
>>> FreeBSD 11.0-STABLE #15 r312669M: Mon Jan 23 14:01:03 CST 2017    
>> https://svnweb.freebsd.org/base/?pathrev=312669 shows that
>> -r3125699 is from head, not from stable/11 .
>>
>> If you have a mix of head and stable/11 materials with mkimg from
>> stable/11 then -a will not be present for mkimg.
>>
>>> karl at NewFS.denninger.net
>>> <mailto:karl at NewFS.denninger.net>:/usr/obj/usr/src/sys/KSD-SMP
>>> root at NewFS:/disk/karl # which mkimg
>>> /usr/bin/mkimg
>>> root at NewFS:/disk/karl # pkg install mkimg
>>> Updating FreeBSD repository catalogue...
>>> FreeBSD repository is up-to-date.
>>> All repositories are up-to-date.
>>> pkg: No packages available to install matching 'mkimg' have been found
>>> in the repositories
>>> root at NewFS:/disk/karl #
>>>
>>> So.... it's part of base and there is no obvious package (a check for
>>> ports in */*mkimg* fails too); my system is current as of Jan 23....
>>>
>>> (As an aside I think if I remove the -a it may work on the Pi, since the
>>> Pi will try to boot the first partition which happens to be DOS -- I
>>> think.  I'll try it.)
>>>
>>> -- 
>>> Karl Denninger
>>> karl at denninger.net <mailto:karl at denninger.net> <mailto:karl at
>>> denninger.net <http://denninger.net>>
>>> /The Market Ticker/
>>> /[S/MIME encrypted email preferred]/
>>
>> ===
>> Mark Millard
>> markmi at dsl-only.net <http://dsl-only.net>
>>
> Manually setting the third partition to active does work to boot, but
> the default partition settings for root and cfg are also wrong; you need
> these overrides or the mount of root fails on startup:
>
> #
> # Partition layout for the Pi2 is:
> # 1 = FAT16 boot (MSDOS) containing bootcode, ubldr, etc.
> # 2 = CFG
> # 3 = Root (must be separately marked active so ubldr can find it)
> # 4 = Altroot
> #
> NANO_SLICE_CFG=s2
> NANO_SLICE_ROOT=s3
> NANO_SLICE_ALTROOT=s4
> NANO_ROOT=s3a
> NANO_ALTROOT=s4a
>
> I'm working on some other issues but this allows the unit to boot up and
> start.  You do need to mark the partition active manually but there's a
> workaround for the need to do that manually -- mount the image after
> it's built in "common" and set the active flag using gpart:
>
> mdi=`mdconfig -f _.disk.image......`
> gpart set -a active -i 3 $mdi
> mdconfig -d -u $mdi
>
> Which works if used in place of the "-a...." argument to the mkimg
> command.  Perhaps this should be changed in the "common" script and made
> the general case, at least for 11-STABLE and before, since it should
> work with pretty-much any version of FreeBSD and obviates the need for
> the updated mkimg.  As things stand right now a checkout of 11-STABLE
> has a common script that relies on an updated mkimg that isn't present
> in the system and thus will//not work.
>
> This is what I changed in common:
>
>         case ${NANO_LAYOUT} in
>         std-embedded)
> #              mkimg -a 3 ${skiparg} ${fmtarg} ${bootmbr} -s mbr -p
> ${s1}:=${NANO_LOG}/_.s1 \
>                 mkimg ${skiparg} ${fmtarg} ${bootmbr} -s mbr -p
> ${s1}:=${NANO_LOG}/_.s1 \
>                         -p ${s2}:=${NANO_LOG}/_.s2 \
>                         -p ${s3}:=${NANO_LOG}/_.s3 \
>                         -o ${out}
>                 mdi=`mdconfig -f ${out}`
>                 gpart show $mdi
>                 gpart set -a active -i 3 $mdi
>                 gpart show $mdi
>                 mdconfig -d -u $mdi
>                 ;;
>
> The two "shows" are (obviously) not necessary but result in log output
> that shows the active flag successfully set.
>
> Partial output from _.di incorporating this change:
>
> Populating `/pics/CrossBuild/embedded/rpi2/_.s2'
> Image `/pics/CrossBuild/embedded/rpi2/_.s2' complete
> + [ -n s1 ]
> + eval 's1=fat16b'
> + s1=fat16b
> + out=/pics/CrossBuild/embedded/images/_.disk.image.HD-MCP
> + mkimg -s mbr -p 'fat16b:=/pics/CrossBuild/embedded/rpi2/_.s1' -p
> 'freebsd:=/pics/CrossBuild/embedded/rpi2/_.s2' -p
> 'freebsd:=/pics/CrossBuild/embedded/rpi2/_.s3' -o
> /pics/CrossBuild/embedded/images/_.disk.image.HD-MCP
> + mdconfig -f /pics/CrossBuild/embedded/images/_.disk.image.HD-MCP
> + mdi=md0
> + gpart show md0
> =>     1  429840  md0  MBR  (210M)
>        1   65536    1  fat16  (32M)
>    65537   65536    2  freebsd  (32M)
>   131073  298768    3  freebsd  (146M)
>
> + gpart set -a active -i 3 md0
> active set on md0s3
> + gpart show md0
> =>     1  429840  md0  MBR  (210M)
>        1   65536    1  fat16  (32M)
>    65537   65536    2  freebsd  (32M)
>   131073  298768    3  freebsd  [active]  (146M)
>
> + mdconfig -d -u md0
> + rm -f /pics/CrossBuild/embedded/images/_.disk.image.HD-MCP.xz
> + echo 'NANO RM -f /pics/CrossBuild/embedded/images/_.disk.image.HD-MCP.xz'
> NANO RM -f /pics/CrossBuild/embedded/images/_.disk.image.HD-MCP.xz
> + uname -r
> + command rm -x -f /pics/CrossBuild/embedded/images/_.disk.image.HD-MCP.xz
> + xz -9 --keep /pics/CrossBuild/embedded/images/_.disk.image.HD-MCP
>
>
> Onward I go... now I need to figure out how to get packages to work in a
> cross-compiled world, which might be a bit of a bigger problem since the
> existing way it's done chroot's into the installed world, which of
> course means that the "pkg" command is for the wrong architecture.....

The above works -- almost.

The system boots on first start, gets an IP address, sets time and such
and then hangs here:

.....
Mounting local filesystems:.
ELF ldconfig path: /lib /usr/lib /usr/lib/compat
Soft Float compatibility ldconfig path:
Setting hostname: nanobsd-HD-MCP.
Setting up harvesting:
[UMA],[FS_ATIME],SWI,INTERRUPT,NET_NG,NET_ETHER,NET_TUN,MOUSE,KEYBOARD,ATTACH,CACHED
Feeding entropy: eval: cannot create /boot/entropy: Read-only file system
smsc0: chip 0xec00, rev. 0002
ue0: link state changed to DOWN
ue0: link state changed to UP
Starting Network: lo0 ue0.
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
        inet 127.0.0.1 netmask 0xff000000
        groups: lo
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
ue0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80009<RXCSUM,VLAN_MTU,LINKSTATE>
        ether b8:27:eb:be:e6:f8
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
Starting devd.
Starting dhclient.
DHCPDISCOVER on ue0 to 255.255.255.255 port 67 interval 7
DHCPOFFER from 192.168.1.200
DHCPREQUEST on ue0 to 255.255.255.255 port 67
DHCPACK from 192.168.1.200
bound to 192.168.1.216 -- renewal in 21600 seconds.
add host 127.0.0.1: gateway lo0 fib 0: route already in table
add host ::1: gateway lo0 fib 0: route already in table
add net fe80::: gateway ::1
add net ff02::: gateway ::1
add net ::ffff:0.0.0.0: gateway ::1
add net ::0.0.0.0: gateway ::1
Generating host.conf.
Creating and/or trimming log files.
Starting syslogd.
Setting date via ntp.
 5 Feb 21:03:24 ntpdate[464]: step time server 74.104.167.114 offset
301.729232 sec
Clearing /tmp (X related).
Updating motd:.
Mounting late filesystems:.
Configuring vt: blanktime.
Starting cron.

It does have the console requested on the serial interface, but I never
get a login prompt.  It doesn't appear to be hanging on the actual cron
startup (I can't ^C out of it which would otherwise be the case.) 
Networking is (obviously) running as it does get the time and I can ping
it.  This implies that I have no getty running, but "onifconsole" IS
specified in the /etc/ttys file.

This could get to be a bit fun trying to figure out why it's freezing
during the startup and before an actual login prompt is produced -- or
whether the "onifconsole" is being ignored in /etc/ttys (looks likely,
but how to check?)

Even more-interesting is that a <return> (or other characters) typed at
it while it's hung *does* echo.....

Do I need "console=comconsole" in /boot/loader.conf?  I would think
setting the option in the nanobsd config file would generate that, but
it does not appear to -- and it also doesn't appear to be necessary,
because I do get all the boot messages on the serial console side.

-- 
Karl Denninger
karl at denninger.net <mailto:karl at denninger.net>
/The Market Ticker/
/[S/MIME encrypted email preferred]/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2993 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.freebsd.org/pipermail/freebsd-arm/attachments/20170205/4dee141c/attachment.bin>


More information about the freebsd-arm mailing list