380 Configure custom image¶
Use case¶
Use the role vbotka.freebsd.custom_image to configure a custom image.
Tree¶
shell> tree .
.
├── ansible.cfg
├── group_vars
│ └── all
│ └── vault.yml
├── hosts
├── host_vars
│ └── images.example.com
└── pb.yml
Synopsis¶
Use the playbook
pb.ymlatimages.example.comto customize FreeBSD image:configure wireless adapter RTL8188EU
configure wpa_supplicant
connect to AP
Requirements¶
root privilege in the managed nodes.
Notes¶
TBD
Note
See also
ansible.cfg¶
[defaults]
inventory = $PWD/hosts
gathering = explicit
callback_result_format = yaml
display_skipped_hosts = false
[connection]
pipelining = true
Inventory hosts¶
images.example.com ansible_host=10.1.0.29
[images]
images.example.com
[images:vars]
ansible_user=admin
ansible_become=true
ansible_python_interpreter=auto_silent
host_vars¶
cimage_download: false
cimage_unpack: false
# download
cimage_dir: /export/images/FreeBSD
cimage_download_images:
- site: https://download.freebsd.org/releases/arm/armv6/ISO-IMAGES/13.5
image: FreeBSD-13.5-RELEASE-arm-armv6-RPI-B.img.xz
checksum: CHECKSUM.SHA512-FreeBSD-13.5-RELEASE-arm-armv6-RPI-B
# mount
cimage_mount_dir: /export/images/FreeBSD
cimage_mount_file: FreeBSD-13.5-RELEASE-arm-armv6-RPI-B.img
cimage_mount_points:
- partition: s2a
fstype: ufs
mountpoint: /mnt3
cimage_mount_path: /mnt3
# rc.conf
cimage_rcconf: true
cimage_rcconf_data:
- {key: wlans_rtwn0, value: wlan0}
- {key: ifconfig_wlan0, value: WPA SYNCDHCP}
# wpa_supplicant.conf
cimage_wpasupconf: true
cimage_wpasupconf_template: wpa_supplicant.conf.2.j2
cimage_wpasupconf_data:
- dev: wlan0
network:
- conf:
ssid: "{{ my_access_point }}"
psk: "{{ my_password }}"
disabled: 0
cimage_wpasupconf_link: true
cimage_wpasupconf_link_dev: wlan0
# postinstall
cimage_postinstall: [loader]
# postinstall loader
fp_loader_tuneables_warning: false
fp_loader_conf_file: "{{ cimage_mount_path }}/boot/loader.conf"
fp_loader_conf_template: ''
loader_states:
hw.usb.template: '3'
umodem_load: 'YES'
boot_multicons: 'YES'
boot_serial: 'YES'
beastie_disable: 'YES'
loader_colo: 'NO'
legal.realtek.license_ack: '1'
fp_loader_conf: "{{ loader_states | dict2items(key_name='name') }}"
loader_modules: [wlan, wlan_wep, wlan_ccmp, wlan_tkip, wlan_amrr, rtwn, if_rtwn_usb]
fp_loader_conf_modules: "{{ dict(loader_modules | product(['YES'])) | dict2items(key_name='name') }}"
Note
The default values of cimage_download and cimage_unpack are true. Set them to
false and enable them when needed.
Hint
Put the variables my_access_point and my_password into an vault file. For
example, group_vars/all/vault.yml
Playbook pb.yml¶
- name: Test role vbotka.freebsd.custom_image
hosts: images
gather_facts: true
roles:
- vbotka.freebsd.custom_image
Playbook output - Display variables¶
(env) > ansible-playbook pb.yml -t cimage_debug -e cimage_debug=true
PLAY [Test role vbotka.freebsd.custom_image] ***********************************
TASK [Gathering Facts] *********************************************************
ok: [images.example.com]
TASK [vbotka.freebsd.custom_image : Debug cimage_debug=true] *******************
ok: [images.example.com] =>
msg: |-
cimage_role_version: 2.7.7
ansible_role_name: vbotka.freebsd.custom_image
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ansible_architecture: amd64
ansible_os_family: FreeBSD
ansible_distribution: FreeBSD
ansible_distribution_major_version: 14
ansible_distribution_version: 14.3
ansible_distribution_release: 14.3-RELEASE
ansible_python_version: 3.11.12
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cimage_sanity: False
cimage_sanity_quiet: True
cimage_download: False
cimage_unpack: False
cimage_mount: True
cimage_install: False
cimage_umount: True
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cimage_get_images: True
cimage_get_checksums: True
cimage_dir: /export/images/FreeBSD
cimage_owner: UNDEFINED
cimage_group: UNDEFINED
cimage_mode: UNDEFINED
cimage_mode_dir: UNDEFINED
cimage_download_images:
- checksum: CHECKSUM.SHA512-FreeBSD-13.5-RELEASE-arm-armv6-RPI-B
image: FreeBSD-13.5-RELEASE-arm-armv6-RPI-B.img.xz
site: https://download.freebsd.org/releases/arm/armv6/ISO-IMAGES/13.5
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cimage_unpack_cmd:
.xz: unxz --keep
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cimage_mount_path: /mnt3
cimage_mount_file: FreeBSD-13.5-RELEASE-arm-armv6-RPI-B.img
cimage_mount_mode: 0755
cimage_mount_points_create: False
cimage_mount_points:
- {fstype: ufs, mountpoint: /mnt3, partition: s2a}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
freebsd_install_retries: 10
freebsd_install_delay: 5
cimage_pkgng_rootdir: /mnt3
cimage_pkgng_use_globs: False
cimage_pkgng_chroot: UNDEFINED
cimage_pkgng_cached: UNDEFINED
cimage_pkgng_ignore_osver: UNDEFINED
cimage_pkgng_pkgsite: UNDEFINED
cimage_packages:
[]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cimage_customize:
[]
PLAY RECAP *********************************************************************
images.example.com : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Playbook output - Download images¶
(env) > ansible-playbook pb.yml -t cimage_download -e cimage_download=true
PLAY [Test role vbotka.freebsd.custom_image] ***********************************
TASK [Gathering Facts] *********************************************************
ok: [images.example.com]
TASK [vbotka.freebsd.custom_image : Download: Create directory /export/images/FreeBSD] ***
ok: [images.example.com]
TASK [vbotka.freebsd.custom_image : Download: Get checksums] *******************
changed: [images.example.com] => (item=CHECKSUM.SHA512-FreeBSD-13.5-RELEASE-arm-armv6-RPI-B)
TASK [vbotka.freebsd.custom_image : Download: Read checksums] ******************
ok: [images.example.com] => (item=CHECKSUM.SHA512-FreeBSD-13.5-RELEASE-arm-armv6-RPI-B)
TASK [vbotka.freebsd.custom_image : Download: Get images] **********************
changed: [images.example.com] => (item=FreeBSD-13.5-RELEASE-arm-armv6-RPI-B.img.xz)
PLAY RECAP *********************************************************************
images.example.com : ok=5 changed=2 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
Playbook output - Unpack images¶
(env) > ansible-playbook pb.yml -t cimage_unpack -e cimage_unpack=true
PLAY [Test role vbotka.freebsd.custom_image] ***********************************
TASK [Gathering Facts] *********************************************************
ok: [images.example.com]
TASK [vbotka.freebsd.custom_image : Unpack: Unpack images] *********************
changed: [images.example.com] => (item=FreeBSD-13.5-RELEASE-arm-armv6-RPI-B.img.xz)
PLAY RECAP *********************************************************************
images.example.com : ok=2 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
Playbook output - Mount image¶
(env) > ansible-playbook pb.yml -t cimage_mount
PLAY [Test role vbotka.freebsd.custom_image] ***********************************
TASK [Gathering Facts] *********************************************************
ok: [images.example.com]
TASK [Mount: Attach memory disk] ***********************************************
included: vbotka.freebsd.lib for images.example.com
TASK [vbotka.freebsd.lib : Al_mdconfig: Default variables.] ********************
ok: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: List memory disks.] ********************
ok: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: Create empty memory disks dictionary.] ***
ok: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: Attach memory disk.] *******************
ok: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: Add memory disk to dictionary.] ********
ok: [images.example.com]
TASK [vbotka.freebsd.custom_image : Mount: Set variable cimage_mount_dev] ******
ok: [images.example.com]
TASK [vbotka.freebsd.custom_image : Mount: Mount partitions md0] ***************
changed: [images.example.com] => (item={'partition': 's2a', 'fstype': 'ufs', 'mountpoint': '/mnt3'})
PLAY RECAP *********************************************************************
images.example.com : ok=9 changed=1 unreachable=0 failed=0 skipped=10 rescued=0 ignored=0
Playbook output - Customize image¶
(env) > ansible-playbook pb.yml -t cimage_customize
PLAY [Test role vbotka.freebsd.custom_image] ***********************************
TASK [Gathering Facts] *********************************************************
ok: [images.example.com]
TASK [vbotka.freebsd.custom_image : Customize image.] **************************
included: /scratch/collections/ansible_collections/vbotka/freebsd/roles/custom_image/tasks/fn/wpasupconf.yml for images.example.com => (item=wpasupconf)
included: /scratch/collections/ansible_collections/vbotka/freebsd/roles/custom_image/tasks/fn/rcconf.yml for images.example.com => (item=rcconf)
included: /scratch/collections/ansible_collections/vbotka/freebsd/roles/custom_image/tasks/fn/postinstall.yml for images.example.com => (item=postinstall)
TASK [vbotka.freebsd.custom_image : Wpasupconf: Configure /mnt3/etc/wpasupplicant.conf] ***
ok: [images.example.com] => (item=wlan0)
TASK [vbotka.freebsd.custom_image : Wpasupconf: Link to /etc/wpa_supplicant.conf.wlan0] ***
ok: [images.example.com]
TASK [vbotka.freebsd.custom_image : Rcconf: Configure /mnt3/etc/rc.conf] *******
ok: [images.example.com] => (item={'key': 'wlans_rtwn0', 'value': 'wlan0'})
ok: [images.example.com] => (item={'key': 'ifconfig_wlan0', 'value': 'WPA SYNCDHCP'})
TASK [Postinstall: Configure.] *************************************************
included: vbotka.freebsd.postinstall for images.example.com => (item=loader)
TASK [vbotka.freebsd.postinstall : Loader: Backup orig /mnt3/boot/loader.conf] ***
ok: [images.example.com]
TASK [vbotka.freebsd.postinstall : Loader: Configure by sysctl /mnt3/boot/loader.conf] ***
changed: [images.example.com] => (item={'name': 'hw.usb.template', 'value': '3'})
ok: [images.example.com] => (item={'name': 'umodem_load', 'value': 'YES'})
changed: [images.example.com] => (item={'name': 'boot_multicons', 'value': 'YES'})
changed: [images.example.com] => (item={'name': 'boot_serial', 'value': 'YES'})
ok: [images.example.com] => (item={'name': 'beastie_disable', 'value': 'YES'})
changed: [images.example.com] => (item={'name': 'loader_colo', 'value': 'NO'})
changed: [images.example.com] => (item={'name': 'legal.realtek.license_ack', 'value': '1'})
TASK [vbotka.freebsd.postinstall : Loader: Configure modules by sysctl /mnt3/boot/loader.conf] ***
changed: [images.example.com] => (item={'name': 'wlan', 'value': 'YES'})
changed: [images.example.com] => (item={'name': 'wlan_wep', 'value': 'YES'})
changed: [images.example.com] => (item={'name': 'wlan_ccmp', 'value': 'YES'})
changed: [images.example.com] => (item={'name': 'wlan_tkip', 'value': 'YES'})
changed: [images.example.com] => (item={'name': 'wlan_amrr', 'value': 'YES'})
changed: [images.example.com] => (item={'name': 'rtwn', 'value': 'YES'})
changed: [images.example.com] => (item={'name': 'if_rtwn_usb', 'value': 'YES'})
RUNNING HANDLER [vbotka.freebsd.postinstall : Loader message reboot] ***********
ok: [images.example.com] =>
msg: '[MESSAGE] Reboot to activate configuration in /boot/loader.conf'
PLAY RECAP *********************************************************************
images.example.com : ok=12 changed=2 unreachable=0 failed=0 skipped=9 rescued=0 ignored=0
Playbook output - Umount image¶
(env) > ansible-playbook pb.yml -t cimage_umount
PLAY [Test role vbotka.freebsd.custom_image] ***********************************
TASK [Gathering Facts] *********************************************************
ok: [images.example.com]
TASK [vbotka.freebsd.custom_image : Umount: Unmount] ***************************
changed: [images.example.com] => (item=/mnt3)
TASK [Umount: Detach memory disk] **********************************************
included: vbotka.freebsd.lib for images.example.com
TASK [vbotka.freebsd.lib : Al_mdconfig: Default variables.] ********************
ok: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: List memory disks.] ********************
ok: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: Create empty memory disks dictionary.] ***
ok: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: Parse memory disks.] *******************
ok: [images.example.com] => (item=md0 vnode 5120M /export/images/FreeBSD/FreeBSD-13.5-RELEASE-arm-armv6-RPI-B.img )
TASK [vbotka.freebsd.lib : Al_mdconfig: Detach memory disk.] *******************
changed: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: Remove memory disk from dictionary.] ***
ok: [images.example.com]
PLAY RECAP *********************************************************************
images.example.com : ok=9 changed=2 unreachable=0 failed=0 skipped=8 rescued=0 ignored=0
Playbook output - Mount, customize, and umount image¶
The play is not idempotent when the image is unmounted. The default is cimage_umount=true. In
this case, at least 3 tasks are changed. The image is mounted, unmounted, and the memory disk is
detached.
(env) > ansible-playbook pb.yml
PLAY [Test role vbotka.freebsd.custom_image] ***********************************
TASK [Gathering Facts] *********************************************************
ok: [images.example.com]
TASK [Mount: Attach memory disk] ***********************************************
included: vbotka.freebsd.lib for images.example.com
TASK [vbotka.freebsd.lib : Al_mdconfig: Default variables.] ********************
ok: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: List memory disks.] ********************
ok: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: Create empty memory disks dictionary.] ***
ok: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: Attach memory disk.] *******************
ok: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: Add memory disk to dictionary.] ********
ok: [images.example.com]
TASK [vbotka.freebsd.custom_image : Mount: Set variable cimage_mount_dev] ******
ok: [images.example.com]
TASK [vbotka.freebsd.custom_image : Mount: Mount partitions md0] ***************
changed: [images.example.com] => (item={'partition': 's2a', 'fstype': 'ufs', 'mountpoint': '/mnt3'})
TASK [vbotka.freebsd.custom_image : Customize image.] **************************
included: /scratch/collections/ansible_collections/vbotka/freebsd/roles/custom_image/tasks/fn/wpasupconf.yml for images.example.com => (item=wpasupconf)
included: /scratch/collections/ansible_collections/vbotka/freebsd/roles/custom_image/tasks/fn/rcconf.yml for images.example.com => (item=rcconf)
included: /scratch/collections/ansible_collections/vbotka/freebsd/roles/custom_image/tasks/fn/postinstall.yml for images.example.com => (item=postinstall)
TASK [vbotka.freebsd.custom_image : Wpasupconf: Configure /mnt3/etc/wpasupplicant.conf] ***
ok: [images.example.com] => (item=wlan0)
TASK [vbotka.freebsd.custom_image : Wpasupconf: Link to /etc/wpa_supplicant.conf.wlan0] ***
ok: [images.example.com]
TASK [vbotka.freebsd.custom_image : Rcconf: Configure /mnt3/etc/rc.conf] *******
ok: [images.example.com] => (item={'key': 'wlans_rtwn0', 'value': 'wlan0'})
ok: [images.example.com] => (item={'key': 'ifconfig_wlan0', 'value': 'WPA SYNCDHCP'})
TASK [Postinstall: Configure.] *************************************************
included: vbotka.freebsd.postinstall for images.example.com => (item=loader)
TASK [vbotka.freebsd.postinstall : Loader: Backup orig /mnt3/boot/loader.conf] ***
ok: [images.example.com]
TASK [vbotka.freebsd.postinstall : Loader: Configure by sysctl /mnt3/boot/loader.conf] ***
ok: [images.example.com] => (item={'name': 'hw.usb.template', 'value': '3'})
ok: [images.example.com] => (item={'name': 'umodem_load', 'value': 'YES'})
ok: [images.example.com] => (item={'name': 'boot_multicons', 'value': 'YES'})
ok: [images.example.com] => (item={'name': 'boot_serial', 'value': 'YES'})
ok: [images.example.com] => (item={'name': 'beastie_disable', 'value': 'YES'})
ok: [images.example.com] => (item={'name': 'loader_colo', 'value': 'NO'})
ok: [images.example.com] => (item={'name': 'legal.realtek.license_ack', 'value': '1'})
TASK [vbotka.freebsd.postinstall : Loader: Configure modules by sysctl /mnt3/boot/loader.conf] ***
ok: [images.example.com] => (item={'name': 'wlan', 'value': 'YES'})
ok: [images.example.com] => (item={'name': 'wlan_wep', 'value': 'YES'})
ok: [images.example.com] => (item={'name': 'wlan_ccmp', 'value': 'YES'})
ok: [images.example.com] => (item={'name': 'wlan_tkip', 'value': 'YES'})
ok: [images.example.com] => (item={'name': 'wlan_amrr', 'value': 'YES'})
ok: [images.example.com] => (item={'name': 'rtwn', 'value': 'YES'})
ok: [images.example.com] => (item={'name': 'if_rtwn_usb', 'value': 'YES'})
TASK [vbotka.freebsd.custom_image : Umount: Unmount] ***************************
changed: [images.example.com] => (item=/mnt3)
TASK [Umount: Detach memory disk] **********************************************
included: vbotka.freebsd.lib for images.example.com
TASK [vbotka.freebsd.lib : Al_mdconfig: Default variables.] ********************
ok: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: List memory disks.] ********************
ok: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: Create empty memory disks dictionary.] ***
ok: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: Parse memory disks.] *******************
ok: [images.example.com] => (item=md0 vnode 5120M /export/images/FreeBSD/FreeBSD-13.5-RELEASE-arm-armv6-RPI-B.img )
TASK [vbotka.freebsd.lib : Al_mdconfig: Detach memory disk.] *******************
changed: [images.example.com]
TASK [vbotka.freebsd.lib : Al_mdconfig: Remove memory disk from dictionary.] ***
ok: [images.example.com]
PLAY RECAP *********************************************************************
images.example.com : ok=27 changed=3 unreachable=0 failed=0 skipped=43 rescued=0 ignored=0
Write the image file to USB¶
shell> dd if=FreeBSD-13.5-RELEASE-arm-armv6-RPI-B.img of=/dev/sdb bs=1M conv=sync status=progress
5348786176 bytes (5.3 GB, 5.0 GiB) copied, 154 s, 34.7 MB/s
5120+0 records in
5120+0 records out
5368709120 bytes (5.4 GB, 5.0 GiB) copied, 154.648 s, 34.7 MB/s
Note
Linux was used to write the image. In FreeBSD, use bs=1m
Result¶
MACs are sanitized.
(env) > ssh freebsd@10.1.0.16 dmesg
Copyright (c) 1992-2021 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 13.5-RELEASE releng/13.5-n259162-882b9f3f2218 RPI-B arm
FreeBSD clang version 19.1.7 (https://github.com/llvm/llvm-project.git llvmorg-19.1.7-0-gcd708029e0b2)
WARNING: 32-bit kernels are deprecated and may be removed in FreeBSD 15.0.
VT: init without driver.
CPU: ARM ARM1176 r0p7 (ECO: 0x00000000)
CPU Features:
Thumb, Security, VMSAv7
Optional instructions:
UMULL, SMULL, MLA, SIMD(ext)
16KB/32B 4-way instruction cache
16KB/32B 4-way WB data cache
real memory = 469757952 (447 MB)
avail memory = 444395520 (423 MB)
arc4random: WARNING: initial seeding bypassed the cryptographic random device because it was not yet seeded and the knob 'bypass_before_seeding' was enabled.
random: entropy device external interface
kbd0 at kbdmux0
ofwbus0: <Open Firmware Device Tree>
simplebus0: <Flattened device tree simple bus> on ofwbus0
ofw_clkbus0: <OFW clocks bus> on ofwbus0
clk_fixed0: <Fixed clock> on ofw_clkbus0
clk_fixed1: <Fixed clock> on ofw_clkbus0
regfix0: <Fixed Regulator> on ofwbus0
clk_fixed2: clock-fixed has no clock-frequency
clk_fixed2: clock-fixed has no clock-frequency
regfix1: <Fixed Regulator> on ofwbus0
regfix2: <Fixed Regulator> on ofwbus0
regfix3: <Fixed Regulator> on ofwbus0
bcm2835_firmware0: <BCM2835 Firmware> on simplebus0
ofw_clkbus1: <OFW clocks bus> on bcm2835_firmware0
clk_fixed2: clock-fixed has no clock-frequency
clk_fixed2: clock-fixed has no clock-frequency
intc0: <BCM2835 Interrupt Controller> mem 0x7e00b200-0x7e00b3ff on simplebus0
clk_fixed2: clock-fixed has no clock-frequency
clk_fixed2: clock-fixed has no clock-frequency
gpio0: <BCM2708/2835 GPIO controller> mem 0x7e200000-0x7e2000b3 irq 6,7 on simplebus0
gpiobus0: <OFW GPIO bus> on gpio0
clk_fixed2: clock-fixed has no clock-frequency
clk_fixed2: clock-fixed has no clock-frequency
mbox0: <BCM2835 VideoCore Mailbox> mem 0x7e00b880-0x7e00b8bf irq 5 on simplebus0
clk_fixed2: clock-fixed has no clock-frequency
clk_fixed2: clock-fixed has no clock-frequency
clk_fixed2: clock-fixed has no clock-frequency
clk_fixed2: clock-fixed has no clock-frequency
bcm_dma0: <BCM2835 DMA Controller> mem 0x7e007000-0x7e007eff irq 22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37 on simplebus0
clk_fixed2: clock-fixed has no clock-frequency
clk_fixed2: clock-fixed has no clock-frequency
systimer0 mem 0x7e003000-0x7e003fff irq 0,1,2,3 on simplebus0
Event timer "BCM2835-3" frequency 1000000 Hz quality 1000
Timecounter "BCM2835-3" frequency 1000000 Hz quality 1000
gpioc0: <GPIO controller> on gpio0
uart0: <PrimeCell UART (PL011)> mem 0x7e201000-0x7e2011ff irq 8 on simplebus0
sdhci_bcm0: <Broadcom 2708 SDHCI controller> mem 0x7e300000-0x7e3000ff irq 16 on simplebus0
mmc0: <MMC/SD bus> on sdhci_bcm0
bcm283x_dwcotg0: <DWC OTG 2.0 integrated USB controller (bcm283x)> mem 0x7e980000-0x7e98ffff,0x7e006000-0x7e006fff irq 20,21 on simplebus0
usbus1 on bcm283x_dwcotg0
bcmwd0: <BCM2708/2835 Watchdog> mem 0x7e100000-0x7e100113,0x7e00a000-0x7e00a023 on simplebus0
vchiq0: <BCM2835 VCHIQ> mem 0x7e00b840-0x7e00b87b irq 52 on simplebus0
vchiq: local ver 8 (min 3), remote ver 8.
pcm0: <VCHIQ audio> on vchiq0
fb0: <BCM2835 VT framebuffer driver> on simplebus0
fb0: keeping existing fb bpp of 32
fbd0 on fb0
WARNING: Device "fb" is Giant locked and may be deleted before FreeBSD 15.0.
VT: initialize with new VT driver "fb".
fb0: 1024x768(1024x768@0,0) 32bpp
fb0: fbswap: 1, pitch 4096, base 0x1e8fa000, screen_size 3145728
cpulist0: <Open Firmware CPU Group> on ofwbus0
cpu0: <Open Firmware CPU> on cpulist0
bcm2835_cpufreq0: <CPU Frequency Control> on cpu0
cpufreq0: <CPU frequency control> on cpu0
clk_fixed2: clock-fixed has no clock-frequency
clk_fixed2: clock-fixed has no clock-frequency
gpioled0: <GPIO LEDs> on ofwbus0
Timecounters tick every 1.000 msec
usbus1: 480Mbps High Speed USB v2.0
ugen1.1: <DWCOTG OTG Root HUB> at usbus1
uhub0 on usbus1
uhub0: <DWCOTG OTG Root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus1
mmcsd0: 32GB <SDHC JB1Q5 3.0 SN F97167D8 MFG 05/2024 by 27 SM> at mmc0 50.0MHz/4bit/65535-block
bcm2835_cpufreq0: ARM 700MHz, Core 400MHz, SDRAM 400MHz, Turbo OFF
WARNING: 32-bit kernels are deprecated and may be removed in FreeBSD 15.0.
Trying to mount root from ufs:/dev/ufs/rootfs [rw]...
Warning: no time-of-day clock registered, system time will not be set accurately
Dual Console: Serial Primary, Video Secondary
uhub0: 1 port with 1 removable, self powered
ugen1.2: <Realtek 802.11n NIC> at usbus1
rtwn0 on uhub0
rtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 2> on usbus1
rtwn0: MAC/BB RTL8188EU, RF 6052 1T1R
random: unblocking device.
GEOM_PART: mmcsd0s2 was automatically resized.
Use `gpart commit mmcsd0s2` to save changes or `gpart undo mmcsd0s2` to revert them.
wlan0: Ethernet address: 11:22:33:44:55:66
lo0: link state changed to UP
wlan0: link state changed to UP
warning: total configured swap (218111 pages) exceeds maximum recommended amount (217952 pages).
warning: increase kern.maxswzone or reduce amount of swap.