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.yml at images.example.com to customize FreeBSD image:

    • configure wireless adapter RTL8188EU

    • configure wpa_supplicant

    • connect to AP

Requirements

  • root privilege in the managed nodes.

Notes

TBD

Note

vbotka.freebsd.custom_image is the role custom_image in the collection vbotka.freebsd.
vbotka.freebsd_custom_image is the role freebsd_custom_image in the namespace vbotka.
Please make sure the versions are the same before you switch between them.

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

host_vars/images.example.com
cimage_download: false
cimage_unpack: false

# download
cimage_dir: /export/images/FreeBSD
cimage_download_images:
  - site: https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/15.0
    image: FreeBSD-15.0-RELEASE-arm64-aarch64-RPI.img.xz
    checksum: CHECKSUM.SHA256-FreeBSD-15.0-RELEASE-arm64-aarch64-RPI

# mount
cimage_mount_file: FreeBSD-15.0-RELEASE-arm64-aarch64-RPI.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.8.1
        ansible_role_name: vbotka.freebsd.custom_image
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        ansible_facts.architecture: amd64
        ansible_facts.os_family: FreeBSD
        ansible_facts.distribution: FreeBSD
        ansible_facts.distribution_major_version: 15
        ansible_facts.distribution_version: 15.0
        ansible_facts.distribution_release: 15.0-RELEASE-p1
        ansible_facts.python_version: 3.11.14
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        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.SHA256-FreeBSD-15.0-RELEASE-arm64-aarch64-RPI
            image: FreeBSD-15.0-RELEASE-arm64-aarch64-RPI.img.xz
            site: https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/15.0

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        cimage_unpack_cmd:
          .xz: unxz --keep

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        cimage_mount_path: /mnt3
        cimage_mount_file: FreeBSD-15.0-RELEASE-arm64-aarch64-RPI.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] *********************************************************
[ERROR]: Task failed: Data could not be sent to remote host "10.1.0.29". Make sure this host can be reached over ssh:
fatal: [images.example.com]: UNREACHABLE! => 
    changed: false
    msg: 'Task failed: Data could not be sent to remote host "10.1.0.29". Make sure this
        host can be reached over ssh:'
    unreachable: true

PLAY RECAP *********************************************************************
images.example.com         : ok=0    changed=0    unreachable=1    failed=0    skipped=0    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] *********************
ok: [images.example.com] => (item=FreeBSD-15.0-RELEASE-arm64-aarch64-RPI.img.xz)

PLAY RECAP *********************************************************************
images.example.com         : ok=2    changed=0    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] ***
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'})

PLAY RECAP *********************************************************************
images.example.com         : ok=11   changed=0    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-15.0-RELEASE-arm64-aarch64-RPI.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-15.0-RELEASE-arm64-aarch64-RPI.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-15.0-RELEASE-arm64-aarch64-RPI.img of=/dev/da1 bs=1m conv=sync status=progress
  5366611968 bytes (5367 MB, 5118 MiB) transferred 150.028s, 36 MB/s
5120+0 records in
5120+0 records out
5368709120 bytes transferred in 150.164342 secs (35752224 bytes/sec)

Note

FreeBSD was used to write the image. In Linux, use bs=1M

Result

MACs are sanitized.

(env) > ssh freebsd@10.1.0.16 dmesg
---<<BOOT>>---
WARNING: Cannot find freebsd,dts-version property, cannot check DTB compliance
Copyright (c) 1992-2025 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 15.0-RELEASE releng/15.0-n280995-7aedc8de6446 GENERIC arm64
FreeBSD clang version 19.1.7 (https://github.com/llvm/llvm-project.git llvmorg-19.1.7-0-gcd708029e0b2)
VT(efifb): resolution 1824x984
real memory  = 469753856 (447 MB)
avail memory = 430403584 (410 MB)
Starting CPU 1 (1)
Starting CPU 2 (2)
Starting CPU 3 (3)
FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs
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
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
clk_fixed2: clock-fixed has no clock-frequency
clk_fixed2: clock-fixed has no clock-frequency
psci0: <ARM Power State Co-ordination Interface Driver> on ofwbus0
smccc0: <ARM SMCCC v1.0> on psci0
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
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
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
clk_fixed2: clock-fixed has no clock-frequency
clk_fixed2: clock-fixed has no clock-frequency
lintc0: <BCM2836 Interrupt Controller> mem 0x40000000-0x400000ff on simplebus0
clk_fixed2: clock-fixed has no clock-frequency
clk_fixed2: clock-fixed has no clock-frequency
intc0: <BCM2835 Interrupt Controller> mem 0x7e00b200-0x7e00b3ff irq 39 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
gpio0: <BCM2708/2835 GPIO controller> mem 0x7e200000-0x7e2000b3 irq 7,8 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 6 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
clk_fixed2: clock-fixed has no clock-frequency
clk_fixed2: clock-fixed has no clock-frequency
generic_timer0: <ARMv7 Generic Timer> irq 1,2,3,4 on ofwbus0
Timecounter "ARM MPCore Timecounter" frequency 19200000 Hz quality 1000
Event timer "ARM MPCore Eventtimer" frequency 19200000 Hz quality 1000
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
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
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
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
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 23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38 on simplebus0
usb_nop_xceiv0: <USB NOP PHY> on ofwbus0
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
smbios0: <System Management BIOS>
smbios0: Entry point: v3 (64-bit), Version: 3.7
bcm2835_clkman0: <BCM283x Clock Manager> mem 0x7e101000-0x7e102fff on simplebus0
gpioc0: <GPIO controller> at pins 0-53 on gpiobus0
uart0: <PrimeCell UART (PL011)> mem 0x7e201000-0x7e2011ff irq 9 on simplebus0
uart0: console (115200,n,8,1)
spi0: <BCM2708/2835 SPI controller> mem 0x7e204000-0x7e2041ff irq 11 on simplebus0
spibus0: <OFW SPI bus> on spi0
spibus0: <unknown card> at cs 0 mode 0
spibus0: <unknown card> at cs 1 mode 0
sdhci_bcm0: <Broadcom 2708 SDHCI controller> mem 0x7e300000-0x7e3000ff irq 17 on simplebus0
mmc0: <MMC/SD bus> on sdhci_bcm0
iichb0: <BCM2708/2835 BSC controller> mem 0x7e804000-0x7e804fff irq 20 on simplebus0
bcm283x_dwcotg0: <DWC OTG 2.0 integrated USB controller (bcm283x)> mem 0x7e980000-0x7e98ffff,0x7e006000-0x7e006fff irq 21,22 on simplebus0
usbus0 on bcm283x_dwcotg0
bcmwd0: <BCM2708/2835 Watchdog> mem 0x7e100000-0x7e100113,0x7e00a000-0x7e00a023 on simplebus0
bcmrng0: <Broadcom BCM2835/BCM2838 RNG> mem 0x7e104000-0x7e10400f irq 40 on simplebus0
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 16.0.
VT: Replacing driver "efifb" with new "fb".
fb0: 1824x984(1824x984@0,0) 32bpp
fb0: fbswap: 1, pitch 7296, base 0x1e513000, screen_size 7237632
pmu0: <Performance Monitoring Unit> irq 0 on ofwbus0
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
armv8crypto0: CPU lacks AES instructions
Timecounters tick every 1.000 msec
usbus0: 480Mbps High Speed USB v2.0
ugen0.1: <DWCOTG OTG Root HUB> at usbus0
uhub0 on usbus0
uhub0: <DWCOTG OTG Root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus0
mmcsd0: 32GB <SDHC JB1Q5 3.0 SN 933B6353 MFG 05/2024 by 27 SM> at mmc0 50.0MHz/4bit/65535-block
iicbus0: <OFW I2C bus> on iichb0
iic0: <I2C generic I/O> on iicbus0
bcm2835_cpufreq0: ARM 600MHz, Core 250MHz, SDRAM 400MHz, Turbo OFF
CPU  0: ARM Cortex-A53 r0p4 affinity:  0
                   Cache Type = <64 byte CWG,64 byte ERG,64 byte D-cacheline,VIPT I-cache,64 byte I-cacheline>
 Instruction Set Attributes 0 = <CRC32>
 Instruction Set Attributes 1 = <>
 Instruction Set Attributes 2 = <>
         Processor Features 0 = <AdvSIMD,FP,EL3 32,EL2 32,EL1 32,EL0 32>
         Processor Features 1 = <MTE_frac>
         Processor Features 2 = <>
      Memory Model Features 0 = <TGran4,TGran64,SNSMem,BigEnd,16bit ASID,1TB PA>
      Memory Model Features 1 = <8bit VMID>
      Memory Model Features 2 = <32bit CCIDX,48bit VA>
      Memory Model Features 3 = <>
      Memory Model Features 4 = <>
             Debug Features 0 = <DoubleLock,2 CTX BKPTs,4 Watchpoints,6 Breakpoints,PMUv3,Debugv8>
             Debug Features 1 = <>
         Auxiliary Features 0 = <>
         Auxiliary Features 1 = <>
AArch32 Instruction Set Attributes 5 = <CRC32,SEVL>
AArch32 Media and VFP Features 0 = <FPRound,FPSqrt,FPDivide,DP VFPv3+v4,SP VFPv3+v4,AdvSIMD>
AArch32 Media and VFP Features 1 = <SIMDFMAC,FPHP DP Conv,SIMDHP SP Conv,SIMDSP,SIMDInt,SIMDLS,FPDNaN,FPFtZ>
CPU  1: ARM Cortex-A53 r0p4 affinity:  1
CPU  2: ARM Cortex-A53 r0p4 affinity:  2
CPU  3: ARM Cortex-A53 r0p4 affinity:  3
lintc0: using for IPIs
Release APs...done
TCP_ratelimit: Is now initialized
Trying to mount root from ufs:/dev/ufs/rootfs [rw]...
Warning: no time-of-day clock registered, system time will not be set accurately
uhub0: 1 port with 1 removable, self powered
Dual Console: Serial Primary, Video Secondary
ugen0.2: <Realtek 802.11n NIC> at usbus0
rtwn0 on uhub0
rtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 2> on usbus0
rtwn0: MAC/BB RTL8188EU, RF 6052 1T1R
random: randomdev_wait_until_seeded unblock wait
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