DESK-MP1-L/pdf
Contents
- 1 History
- 2 General Information
- 3 Development
- 3.1 Synchronizing the git repositories
- 3.2 Building Boot image
- 3.3 Building Linux
- 3.4 Building the Yocto BSP
- 3.5 Hello word example
- 4 Deployment
- 5 Peripherals
History[edit | edit source]
DESK-MP1-L History | |||
---|---|---|---|
Version | Issue Date | Notes | Refers to |
Aug 2023 | DESK-MP1-L-1.0.0 release | ETRA SOM | |
ETRA SBC | |||
1.0.1 | Aug 2023 | DESK-MP1-L-1.0.1 Minor release | ETRA SOM |
ETRA SBC |
General Information[edit | edit source]
Release Notes[edit | edit source]
DAVE Embedded Systems adds to the latest Linux BSP from STMicroelectronics the customization required to support the SOC platform. For this reason most of the documentation provided by STMicroelectronics remains valid for the DESK development kit.
However, some customization is required, in particular at bootloader and linux kernel levels.
The following table reports the DESK releases information.
DESK version | |
---|---|
Release number | 1.0.1 |
Release type | Minor |
Status | Released |
Release date | 31/07/2023 |
Release notes | Ver 1.0.1 |
Product support | ETRA SOM, ETRA SBC |
MVM (distro version) | Ubuntu 20.04 |
U-Boot version | 2021.10-desk-mp1-l-1.0.1 |
Linux version | 5.15.67-desk-mp1-l-1.0.1 |
Drivers |
UART debug (2-wire) Ethernet |
Manufacturer BSP version | openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23 |
Graphic libraries | Qt 5.15.3 |
Build System | Yocto kirkstone |
DESK-MP1-L 1.0.1[edit | edit source]
Release notes:
- Change URL from ssh to https protocol
Known Limitations[edit | edit source]
The following table reports the known limitations of this DESK release:
Issue | Description |
---|---|
Run Qt5 application from serial console | Start a Qt application from the serial console requires some environment variables to be set: see here |
Downloadable binary images[edit | edit source]
All binary images for DESK-MP1-L are hosted on DAVE Embedded System mirror server. There you can find a sub directory for each version of this development kit.
U-Boot performs 2-stage bootloader providing two files: ATF
and fip
. Both two files must be stored into SD card using dd
command.
A summary of images with a brief description can be found into the table below:
Image | DESK version 1.0.1 |
---|---|
Platform | DCSB50000 |
Carrier Board ConfigID | 0001 |
LCD panel | Ampire AM-800480BTMQW-TBMH-A 800x480 7"RGB |
Touchscreen | capacitive (USB) |
ATF | ATF |
Fip | uSD FIP |
Linux kernel | uImage |
Device tree | stm32mp157a-dcsb5000dd1r |
DESK-MP1-L 1.0.0[edit | edit source]
Release notes:
- First release based on STM
openstlinux-5.15
Known Limitations[edit | edit source]
The following table reports the known limitations of this DESK release:
Issue | Description |
---|---|
Run Qt5 application from serial console | Start a Qt application from the serial console requires some environment variables to be set: see here |
Downloadable binary images[edit | edit source]
All binary images for DESK-MP1-L are hosted on DAVE Embedded System mirror server. There you can find a sub directory for each version of this development kit.
U-Boot performs 2-stage bootloader providing two files: ATF
and fip
. Both two files must be stored into SD card using dd
command.
A summary of images with a brief description can be found into the table below:
Image | DESK version 1.0.0 |
---|---|
Platform | DCSB50000 |
Carrier Board ConfigID | 0001 |
LCD panel | Ampire AM-800480BTMQW-TBMH-A 800x480 7"RGB |
Touchscreen | capacitive (USB) |
ATF | ATF |
Fip | uSD FIP |
Linux kernel | uImage |
Device tree | stm32mp157a-dcsb5000dd1r |
DESK-MP1-L/General/DVDK Virtual Machine
Booting from NFS[edit | edit source]
This configuration is very helpful during the software development (both for kernel and applications). The kernel image is downloaded via TFTP while the root file system is remotely mounted via NFS from the host. It is assumed that the development host:
- is connected with the target host board through an Ethernet LAN
- exports the directory containing the root file system for the target through the NFS server
- runs a TFTP server.
- has a proper subnet IP address
net_nfs configuration[edit | edit source]
DESK-MP1-L Virtual Machine is properly configured for the TFTP and NFS debug.
In any case, some variables has to be configured on the target and the VM itself has to be configured for respect to the network environment.
Host (Virtual Machine) configuration[edit | edit source]
The DESK-MP1-L Virtual Machine has the tftp and nfs services already running. Optionally, their configuration has to be changed according to the network configuration where the target is connected to.
Check and properly configure the items describe in VirtualBox Network Configuration
Target configuration[edit | edit source]
The IP address for server and target should be configured: an example (for a network subnet 192.168.0.x
)
=> setenv serverip 192.168.0.125 => setenv ipaddr 192.168.0.90
serverip
is the IP address of the host machine running the tftp/nfs serveripaddr
is the IP address of the target
The kernel and device tree files has to be selected
=> setenv bootfile desk-mp1-l/uImage => setenv fdtfile desk-mp1-l/stm32mp157a-dcsb5000dd1r.dtb
finally, the root file system directory on the Virtual Machine should be configured for let the kernel to find the INIT
=> setenv rootpath /home/dvdk/desk-mp1-l/rfs/desk-MP1-l/
To run this configuration just issue the net_nfs command which firstly download the kernel and device tree using the tftp protocol
NOTICE: CPU: STM32MP157AAB Rev.B NOTICE: Model: DAVE desk-mp1 stm32mp157a-dcsb5000dd1r INFO: PMIC version = 0x21 INFO: Reset reason (0x15): INFO: Power-on Reset (rst_por) INFO: FCONF: Reading TB_FW firmware configuration file from: 0x2ffe2000 INFO: FCONF: Reading firmware configuration information for: stm32mp_io INFO: Using SDMMC INFO: Instance 1 INFO: Boot used partition fsbl1 NOTICE: BL2: v2.6-stm32mp1-r2.0(debug):desk-mp1-l-1.0.0(709eafce) NOTICE: BL2: Built : 08:34:10, Jul 25 2023 INFO: BL2: Doing platform setup INFO: RAM: DDR3-DDR3L 16bits 533000kHz INFO: Memory size = 0x20000000 (512 MB) INFO: BL2: Loading image id 1 INFO: Loading image id=1 at address 0x2ffff000 INFO: Image id=1 loaded: 0x2ffff000 - 0x2ffff226 INFO: FCONF: Reading FW_CONFIG firmware configuration file from: 0x2ffff000 INFO: FCONF: Reading firmware configuration information for: dyn_cfg INFO: FCONF: Reading firmware configuration information for: stm32mp1_firewall INFO: BL2: Loading image id 4 INFO: Loading image id=4 at address 0x2ffc5000 INFO: Image id=4 loaded: 0x2ffc5000 - 0x2ffd9820 INFO: BL2: Skip loading image id 8 INFO: BL2: Skip loading image id 9 INFO: BL2: Loading image id 2 INFO: Loading image id=2 at address 0xc0500000 INFO: Image id=2 loaded: 0xc0500000 - 0xc0512e30 INFO: BL2: Loading image id 16 INFO: Loading image id=16 at address 0x2ffc0000 INFO: Image id=16 loaded: 0x2ffc0000 - 0x2ffc3ff5 INFO: BL2: Loading image id 5 INFO: Loading image id=5 at address 0xc0100000 INFO: Image id=5 loaded: 0xc0100000 - 0xc01e8ba0 NOTICE: BL2: Booting BL32 INFO: Entry point address = 0x2ffc5000 INFO: SPSR = 0x1d3 NOTICE: SP_MIN: v2.6-stm32mp1-r2.0(debug):desk-mp1-l-1.0.0(709eafce) NOTICE: SP_MIN: Built : 08:34:10, Jul 25 2023 INFO: ARM GICv2 driver initialized INFO: ETZPC: UART1 (3) could be non secure INFO: ETZPC: SPI6 (4) could be non secure INFO: ETZPC: RNG1 (7) could be non secure INFO: ETZPC: HASH1 (8) could be non secure INFO: ETZPC: CRYP1 (9) could be non secure INFO: ETZPC: I2C6 (12) could be non secure INFO: SP_MIN: Initializing runtime services INFO: SP_MIN: Preparing exit to normal world serial_stm32 serial@40010000: pinctrl_select_state_full: uclass_get_device_by_phandle_id: err=-19 U-Boot 2021.10-desk-mp1-l-1.0.0 (Jul 25 2023 - 08:53:53 +0000) CPU: STM32MP157AAB Rev.B Model: Dave desk-mp1 stm32mp157a-dcsb5000dd1r Board: Etra in trusted mode (st,stm32mp157a-dcsb5000dd1r) DRAM: 512 MiB Clocks: - MPU : 650 MHz - MCU : 208.878 MHz - AXI : 266.500 MHz - PER : 0 MHz - DDR : 533 MHz WDT: Started with servicing (32s timeout) NAND: 0 MiB MMC: STM32 SD/MMC: 2, STM32 SD/MMC: 0, STM32 SD/MMC: 1 Loading Environment from MMC... OK In: serial Out: serial Err: serial invalid MAC address 0 in OTP 00:00:00:00:00:00 SOM ConfigID#: 00000001 SOM UniqueID#: 39303435:33385105:001e0024 CB ConfigID#: 00000001 CB UniqueID#: 0d000035:c4a4762d Board: ETRA on SBC Net: Warning: ethernet@5800a000 (eth0) using random MAC address - 0a:7f:53:9f:1a:77 eth0: ethernet@5800a000 Hit any key to stop autoboot: 0 STM32MP> STM32MP> STM32MP> edit serverip edit: 192.168.0.169 STM32MP> savee Saving Environment to MMC... Writing to MMC(0)... OK STM32MP> run net_nfs ethernet@5800a000 Waiting for PHY auto negotiation to complete..... done Using ethernet@5800a000 device TFTP from server 192.168.0.169; our IP address is 192.168.0.89 Filename 'desk-mp1-l/uImage'. Load address: 0xc2000000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ####################### 1.2 MiB/s done Bytes transferred = 8765832 (85c188 hex) Using ethernet@5800a000 device TFTP from server 192.168.0.169; our IP address is 192.168.0.89 Filename 'desk-mp1-l/stm32mp157a-dcsb5000dd1r.dtb'. Load address: 0xc4000000 Loading: ############ 915 KiB/s done Bytes transferred = 60967 (ee27 hex) ## Booting kernel from Legacy Image at c2000000 ... Image Name: Linux-5.15.67-desk-mp1-l-1.0.0 Created: 2023-07-26 6:51:54 UTC Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 8765768 Bytes = 8.4 MiB Load Address: c2000040 Entry Point: c2000040 Verifying Checksum ... OK ## Flattened Device Tree blob at c4000000 Booting using the fdt blob at 0xc4000000 XIP Kernel Image Loading Device Tree to cffee000, end cffffe26 ... OK ETZPC: 0x54003000 node disabled, decprot 7=0 ETZPC: 0x48001000 node disabled, decprot 89=2 Starting kernel ... [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 5.15.67-desk-mp1-l-1.0.0 (jenkins@focalbakery) (arm-ostl-linux-gnueabi-gcc (GCC) 11.3.0, GNU ld (GNU Binutils) 2.38.20220708) #1 SMP PREEMPT Wed Jul 26 08:48:59 CEST 2023 [ 0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d [ 0.000000] CPU: div instructions available: patching division code [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache [ 0.000000] OF: fdt: Machine model: Dave desk-mp1 stm32mp157a-dcsb5000dd1r [ 0.000000] Memory policy: Data cache writealloc [ 0.000000] Reserved memory: created DMA memory pool at 0x10000000, size 0 MiB [ 0.000000] OF: reserved mem: initialized node mcuram2@10000000, compatible id shared-dma-pool [ 0.000000] Reserved memory: created DMA memory pool at 0x10040000, size 0 MiB [ 0.000000] OF: reserved mem: initialized node vdev0vring0@10040000, compatible id shared-dma-pool [ 0.000000] Reserved memory: created DMA memory pool at 0x10041000, size 0 MiB [ 0.000000] OF: reserved mem: initialized node vdev0vring1@10041000, compatible id shared-dma-pool [ 0.000000] Reserved memory: created DMA memory pool at 0x10042000, size 0 MiB [ 0.000000] OF: reserved mem: initialized node vdev0buffer@10042000, compatible id shared-dma-pool [ 0.000000] Reserved memory: created DMA memory pool at 0x10048000, size 0 MiB [ 0.000000] OF: reserved mem: initialized node mcu_rsc_table@10048000, compatible id shared-dma-pool [ 0.000000] Reserved memory: created DMA memory pool at 0x30000000, size 0 MiB [ 0.000000] OF: reserved mem: initialized node mcuram@30000000, compatible id shared-dma-pool [ 0.000000] Reserved memory: created DMA memory pool at 0x38000000, size 0 MiB [ 0.000000] OF: reserved mem: initialized node retram@38000000, compatible id shared-dma-pool [ 0.000000] cma: Reserved 128 MiB at 0xd8000000 [ 0.000000] Zone ranges: [ 0.000000] Normal [mem 0x00000000c0000000-0x00000000dfffffff] [ 0.000000] HighMem empty [ 0.000000] Movable zone start for each node [ 0.000000] Early memory node ranges [ 0.000000] node 0: [mem 0x00000000c0000000-0x00000000d3ffffff] [ 0.000000] node 0: [mem 0x00000000d4000000-0x00000000d7ffffff] [ 0.000000] node 0: [mem 0x00000000d8000000-0x00000000dfffffff] [ 0.000000] Initmem setup node 0 [mem 0x00000000c0000000-0x00000000dfffffff] [ 0.000000] psci: probing for conduit method from DT. [ 0.000000] psci: PSCIv1.1 detected in firmware. [ 0.000000] psci: Using standard PSCI v0.2 function IDs [ 0.000000] psci: MIGRATE_INFO_TYPE not supported. [ 0.000000] psci: SMC Calling Convention v1.2 [ 0.000000] percpu: Embedded 17 pages/cpu s37004 r8192 d24436 u69632 [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 129920 [ 0.000000] Kernel command line: root=/dev/nfs rw nfsroot=192.168.0.169:/home/dvdk/desk-mp1-l/rfs/desk-mp1-l,v3,tcp ip=192.168.0.89:192.168.0.169:192.168.0.254:255.255.255.0:etra:eth0:off panic=1 console=ttySTM0,115200 [ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear) [ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear) [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off [ 0.000000] Memory: 300948K/524288K available (13312K kernel code, 1379K rwdata, 3896K rodata, 1024K init, 218K bss, 92268K reserved, 131072K cma-reserved, 0K highmem) [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] trace event string verifier disabled [ 0.000000] rcu: Preemptible hierarchical RCU implementation. [ 0.000000] rcu: RCU event tracing is enabled. [ 0.000000] Trampoline variant of Tasks RCU enabled. [ 0.000000] Tracing variant of Tasks RCU enabled. [ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies. [ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16 [ 0.000000] arch_timer: cp15 timer(s) running at 24.00MHz (virt). [ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns [ 0.000002] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns [ 0.000030] Switching to timer-based delay loop, resolution 41ns [ 0.001201] Console: colour dummy device 80x30 [ 0.001272] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000) [ 0.001305] pid_max: default: 32768 minimum: 301 [ 0.001622] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.001660] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear) [ 0.003046] CPU: Testing write buffer coherency: ok [ 0.003575] /cpus/cpu@0 missing clock-frequency property [ 0.003646] /cpus/cpu@1 missing clock-frequency property [ 0.003680] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000 [ 0.005432] Setting up static identity map for 0xc0100000 - 0xc0100060 [ 0.005697] rcu: Hierarchical SRCU implementation. [ 0.008145] smp: Bringing up secondary CPUs ... [ 0.009536] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001 [ 0.009802] smp: Brought up 1 node, 2 CPUs [ 0.009844] SMP: Total of 2 processors activated (96.00 BogoMIPS). [ 0.009862] CPU: All CPU(s) started in SVC mode. [ 0.010838] devtmpfs: initialized [ 0.032452] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5 [ 0.032864] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns [ 0.032908] futex hash table entries: 512 (order: 3, 32768 bytes, linear) [ 0.040445] pinctrl core: initialized pinctrl subsystem [ 0.043161] NET: Registered PF_NETLINK/PF_ROUTE protocol family [ 0.046724] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 0.048623] thermal_sys: Registered thermal governor 'step_wise' [ 0.049008] cpuidle: using governor menu [ 0.049407] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers. [ 0.049438] hw-breakpoint: maximum watchpoint size is 8 bytes. [ 0.049983] Serial: AMBA PL011 UART driver [ 0.053265] stm32-pm-domain pm_domain: domain core-ret-power-domain registered [ 0.053322] stm32-pm-domain pm_domain: subdomain core-power-domain registered [ 0.053343] stm32-pm-domain pm_domain: domains probed [ 0.087761] platform panel-rgb@0: Fixing up cyclic dependency with 5a001000.display-controller [ 0.106230] Kprobes globally optimized [ 0.121810] SCSI subsystem initialized [ 0.122791] usbcore: registered new interface driver usbfs [ 0.122884] usbcore: registered new interface driver hub [ 0.122968] usbcore: registered new device driver usb [ 0.123377] pps_core: LinuxPPS API ver. 1 registered [ 0.123399] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it> [ 0.123439] PTP clock support registered [ 0.123796] EDAC MC: Ver: 3.0.0 [ 0.125013] arm-scmi firmware:scmi: SCMI Notifications - Core Enabled. [ 0.125132] arm-scmi firmware:scmi: SCMI Protocol v2.0 'ST:' Firmware version 0x0 [ 0.126577] Advanced Linux Sound Architecture Driver Initialized. [ 0.127754] Bluetooth: Core ver 2.22 [ 0.127866] NET: Registered PF_BLUETOOTH protocol family [ 0.127885] Bluetooth: HCI device and connection manager initialized [ 0.127911] Bluetooth: HCI socket layer initialized [ 0.127931] Bluetooth: L2CAP socket layer initialized [ 0.127971] Bluetooth: SCO socket layer initialized [ 0.129075] clocksource: Switched to clocksource arch_sys_counter [ 0.222304] NET: Registered PF_INET protocol family [ 0.222717] IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear) [ 0.224423] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes, linear) [ 0.224495] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear) [ 0.224524] TCP established hash table entries: 4096 (order: 2, 16384 bytes, linear) [ 0.224595] TCP bind hash table entries: 4096 (order: 3, 32768 bytes, linear) [ 0.224699] TCP: Hash tables configured (established 4096 bind 4096) [ 0.224844] UDP hash table entries: 256 (order: 1, 8192 bytes, linear) [ 0.224901] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear) [ 0.225282] NET: Registered PF_UNIX/PF_LOCAL protocol family [ 0.230164] RPC: Registered named UNIX socket transport module. [ 0.230203] RPC: Registered udp transport module. [ 0.230217] RPC: Registered tcp transport module. [ 0.230230] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 0.232495] hw perfevents: enabled with armv7_cortex_a7 PMU driver, 5 counters available [ 0.234675] Initialise system trusted keyrings [ 0.235207] workingset: timestamp_bits=14 max_order=17 bucket_order=3 [ 0.246806] squashfs: version 4.0 (2009/01/31) Phillip Lougher [ 0.248380] NFS: Registering the id_resolver key type [ 0.248479] Key type id_resolver registered [ 0.248498] Key type id_legacy registered [ 0.248714] ntfs: driver 2.1.32 [Flags: R/O]. [ 0.249020] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc. [ 0.250003] fuse: init (API version 7.34) [ 0.395127] NET: Registered PF_ALG protocol family [ 0.395171] Key type asymmetric registered [ 0.395187] Asymmetric key parser 'x509' registered [ 0.395381] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 245) [ 0.395407] io scheduler mq-deadline registered [ 0.395422] io scheduler kyber registered [ 0.405306] reg11: supplied by regulator-dummy [ 0.405769] reg18: supplied by regulator-dummy [ 0.406151] usb33: supplied by regulator-dummy [ 0.411183] STM32 USART driver initialized [ 0.434054] brd: module loaded [ 0.445036] loop: module loaded [ 0.454344] CAN device driver interface [ 0.456688] pegasus: Pegasus/Pegasus II USB Ethernet driver [ 0.456791] usbcore: registered new interface driver pegasus [ 0.456877] usbcore: registered new interface driver asix [ 0.456942] usbcore: registered new interface driver ax88179_178a [ 0.457024] usbcore: registered new interface driver cdc_ether [ 0.457107] usbcore: registered new interface driver smsc75xx [ 0.457188] usbcore: registered new interface driver smsc95xx [ 0.457253] usbcore: registered new interface driver net1080 [ 0.457320] usbcore: registered new interface driver cdc_subset [ 0.457381] usbcore: registered new interface driver zaurus [ 0.457557] usbcore: registered new interface driver cdc_ncm [ 0.458877] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 0.458938] ehci-platform: EHCI generic platform driver [ 0.459309] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 0.459354] ohci-platform: OHCI generic platform driver [ 0.460175] usbcore: registered new interface driver cdc_acm [ 0.460198] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters [ 0.460313] usbcore: registered new interface driver usb-storage [ 0.464732] i2c_dev: i2c /dev entries driver [ 0.468648] softdog: initialized. soft_noboot=0 soft_margin=60 sec soft_panic=0 (nowayout=1) [ 0.468681] softdog: soft_reboot_cmd=<not set> soft_active_on_boot=0 [ 0.470821] sdhci: Secure Digital Host Controller Interface driver [ 0.470851] sdhci: Copyright(c) Pierre Ossman [ 0.470864] Synopsys Designware Multimedia Card Interface Driver [ 0.471385] sdhci-pltfm: SDHCI platform and OF driver helper [ 0.472651] ledtrig-cpu: registered to indicate activity on CPUs [ 0.472763] arm-scmi firmware:scmi: Failed. SCMI protocol 17 not active. [ 0.473021] SMCCC: SOC_ID: ID = jep106:0020:0500 Revision = 0x00002000 [ 0.473965] hid: raw HID events driver (C) Jiri Kosina [ 0.474246] usbcore: registered new interface driver usbhid [ 0.474267] usbhid: USB HID core driver [ 0.483142] NET: Registered PF_PACKET protocol family [ 0.483200] can: controller area network core [ 0.483333] NET: Registered PF_CAN protocol family [ 0.483355] can: raw protocol [ 0.483373] can: broadcast manager protocol [ 0.483394] can: netlink gateway - max_hops=1 [ 0.483851] Bluetooth: RFCOMM TTY layer initialized [ 0.483897] Bluetooth: RFCOMM socket layer initialized [ 0.483951] Bluetooth: RFCOMM ver 1.11 [ 0.484429] lib80211: common routines for IEEE802.11 drivers [ 0.484965] Key type dns_resolver registered [ 0.485104] ThumbEE CPU extension supported. [ 0.485138] Registering SWP/SWPB emulation handler [ 0.485634] registered taskstats version 1 [ 0.485669] Loading compiled-in X.509 certificates [ 0.525316] stm32-mdma 58000000.dma-controller: STM32 MDMA driver registered [ 0.528679] stm32-dma 48000000.dma-controller: no dma pool: can't use MDMA: 0 [ 0.530588] stm32-dma 48000000.dma-controller: STM32 DMA driver registered [ 0.549548] stm_thermal 50028000.thermal: stm_thermal_probe: Driver initialized successfully [ 0.556571] /soc/interrupt-controller@5000d000: bank0 [ 0.556627] /soc/interrupt-controller@5000d000: bank1 [ 0.556658] /soc/interrupt-controller@5000d000: bank2 [ 0.558652] stm32mp157-pinctrl soc:pinctrl@50002000: GPIOA bank added [ 0.559604] stm32mp157-pinctrl soc:pinctrl@50002000: GPIOB bank added [ 0.560374] stm32mp157-pinctrl soc:pinctrl@50002000: GPIOC bank added [ 0.561133] stm32mp157-pinctrl soc:pinctrl@50002000: GPIOD bank added [ 0.561852] stm32mp157-pinctrl soc:pinctrl@50002000: GPIOE bank added [ 0.562533] stm32mp157-pinctrl soc:pinctrl@50002000: GPIOF bank added [ 0.563284] stm32mp157-pinctrl soc:pinctrl@50002000: GPIOG bank added [ 0.563966] stm32mp157-pinctrl soc:pinctrl@50002000: GPIOH bank added [ 0.564049] stm32mp157-pinctrl soc:pinctrl@50002000: Pinctrl STM32 initialized [ 0.565018] stm32mp157-pinctrl soc:pinctrl@54004000: at least one GPIO bank is required [ 0.565051] stm32mp157-pinctrl: probe of soc:pinctrl@54004000 failed with error -22 [ 0.566995] LCD_5V: supplied by vin [ 0.567757] wlan-en-regulator: supplied by vin [ 0.571816] stm32-usart 4000f000.serial: interrupt mode for rx (no dma) [ 0.571855] stm32-usart 4000f000.serial: interrupt mode for tx (no dma) [ 0.571893] 4000f000.serial: ttySTM1 at MMIO 0x4000f000 (irq = 49, base_baud = 4000000) is a stm32-usart [ 0.574102] stm32-usart 40010000.serial: interrupt mode for rx (no dma) [ 0.574137] stm32-usart 40010000.serial: interrupt mode for tx (no dma) [ 0.574175] 40010000.serial: ttySTM0 at MMIO 0x40010000 (irq = 50, base_baud = 4000000) is a stm32-usart [ 1.876693] printk: console [ttySTM0] enabled [ 1.883384] stm32-usart 40018000.serial: interrupt mode for rx (no dma) [ 1.888580] stm32-usart 40018000.serial: interrupt mode for tx (no dma) [ 1.895372] 40018000.serial: ttySTM3 at MMIO 0x40018000 (irq = 51, base_baud = 4000000) is a stm32-usart [ 1.906972] stm32-usart 40019000.serial: interrupt mode for rx (no dma) [ 1.912252] stm32-usart 40019000.serial: interrupt mode for tx (no dma) [ 1.918854] 40019000.serial: ttySTM2 at MMIO 0x40019000 (irq = 52, base_baud = 4000000) is a stm32-usart [ 1.934966] stm32-dwmac 5800a000.ethernet: IRQ eth_lpi not found [ 1.940786] stm32-dwmac 5800a000.ethernet: User ID: 0x40, Synopsys ID: 0x42 [ 1.946602] stm32-dwmac 5800a000.ethernet: DWMAC4/5 [ 1.951618] stm32-dwmac 5800a000.ethernet: DMA HW capability register supported [ 1.958909] stm32-dwmac 5800a000.ethernet: RX Checksum Offload Engine supported [ 1.966231] stm32-dwmac 5800a000.ethernet: TX Checksum insertion supported [ 1.973137] stm32-dwmac 5800a000.ethernet: Wake-Up On Lan supported [ 1.979571] stm32-dwmac 5800a000.ethernet: TSO supported [ 1.984744] stm32-dwmac 5800a000.ethernet: Enable RX Mitigation via HW Watchdog Timer [ 1.992573] stm32-dwmac 5800a000.ethernet: device MAC address 0a:7f:53:9f:1a:77 [ 1.999893] stm32-dwmac 5800a000.ethernet: Enabled L3L4 Flow TC (entries=2) [ 2.006881] stm32-dwmac 5800a000.ethernet: Enabled RFS Flow TC (entries=8) [ 2.013829] stm32-dwmac 5800a000.ethernet: TSO feature enabled [ 2.019637] stm32-dwmac 5800a000.ethernet: Using 32 bits DMA width [ 2.034230] stm32_rtc 5c004000.rtc: registered as rtc0 [ 2.038053] stm32_rtc 5c004000.rtc: setting system clock to 2000-01-01T00:00:29 UTC (946684829) [ 2.047401] stm32_rtc 5c004000.rtc: Date/Time must be initialized [ 2.052874] stm32_rtc 5c004000.rtc: registered rev:1.2 [ 2.078617] stm32f7-i2c 40015000.i2c: using dma1chan0 (tx) and dma1chan1 (rx) for DMA transfers [ 2.086833] stm32f7-i2c 40015000.i2c: STM32F7 I2C-0 bus adapter [ 2.117717] stpmic1 1-0033: PMIC Chip Version: 0x21 [ 2.126328] vddcore: supplied by vin [ 2.131599] vdd_ddr: supplied by vin [ 2.136721] vdd: supplied by vin [ 2.141565] v3v3: supplied by vin [ 2.146472] v1v8_audio: supplied by v3v3 [ 2.153323] v3v3_hdmi: supplied by vin [ 2.159381] vtt_ddr: supplied by vdd_ddr [ 2.164720] vdd_usb: supplied by vin [ 2.170470] vdda: supplied by vin [ 2.175914] v1v2_hdmi: supplied by v3v3 [ 2.181586] vref_ddr: supplied by vin [ 2.187238] bst_out: supplied by vin [ 2.190390] vbus_otg: supplied by bst_out [ 2.194352] vbus_sw: supplied by bst_out [ 2.203933] hwmon hwmon1: temp1_input not attached to any thermal zone [ 2.211164] rtc-ds3232 1-0068: registered as rtc1 [ 2.215372] stm32f7-i2c 5c002000.i2c: STM32F7 I2C-1 bus adapter [ 2.222556] i2c i2c-0: Added multiplexed i2c bus 2 [ 2.226036] i2c-mux-gpio i2cmux: 1 port mux on STM32F7 I2C(0x40015000) adapter [ 2.238182] mmci-pl18x 48004000.mmc: mmc0: PL180 manf 53 rev2 at 0x48004000 irq 38,0 (pio) [ 2.437741] mmci-pl18x 58005000.mmc: Got CD GPIO [ 2.442335] mmci-pl18x 58005000.mmc: mmc1: PL180 manf 53 rev2 at 0x58005000 irq 42,0 (pio) [ 2.467897] mmc0: queuing unknown CIS tuple 0x01 [d9 01 ff] (3 bytes) [ 2.480403] mmci-pl18x 58007000.mmc: mmc2: PL180 manf 53 rev2 at 0x58007000 irq 43,0 (pio) [ 2.488797] mmc0: queuing unknown CIS tuple 0x1a [01 01 00 02 07] (5 bytes) [ 2.498312] mmc0: queuing unknown CIS tuple 0x1b [c1 41 30 30 ff ff 32 00] (8 bytes) [ 2.505375] mmc0: queuing unknown CIS tuple 0x14 [] (0 bytes) [ 2.518285] mmc0: new high speed SDIO card at address 0001 [ 2.524170] mmc1: new high speed SDHC card at address 59b4 [ 2.528525] stm32-ipcc 4c001000.mailbox: ipcc rev:1.0 enabled, 6 chans, proc 0 [ 2.538317] mmcblk1: mmc1:59b4 USDU1 14.9 GiB [ 2.542967] stm32-rproc 10000000.m4: IRQ index 0 not found [ 2.548806] remoteproc remoteproc0: m4 is available [ 2.555924] mmcblk1: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 [ 2.561309] rfkill_gpio bt_rfkill: bt_rfkill device registered. [ 2.572955] LCD_VDD: supplied by vdd [ 2.575854] TOUCH_VDD: supplied by vdd [ 2.581775] stm32-usbphyc 5a006000.usbphyc: registered rev:1.0 [ 2.594873] dwc2 49000000.usb-otg: supply vusb_d not found, using dummy regulator [ 2.601351] dwc2 49000000.usb-otg: supply vusb_a not found, using dummy regulator [ 2.616961] mmc2: new DDR MMC card at address 0001 [ 2.621840] mmcblk2: mmc2:0001 W62704 3.53 GiB [ 2.631363] mmcblk2boot0: mmc2:0001 W62704 2.00 MiB [ 2.638100] mmcblk2boot1: mmc2:0001 W62704 2.00 MiB [ 2.644545] mmcblk2rpmb: mmc2:0001 W62704 512 KiB, chardev (240:0) [ 2.746682] dwc2 49000000.usb-otg: EPs: 9, dedicated fifos, 952 entries in SPRAM [ 2.753845] dwc2 49000000.usb-otg: DWC OTG Controller [ 2.757856] dwc2 49000000.usb-otg: new USB bus registered, assigned bus number 1 [ 2.765325] dwc2 49000000.usb-otg: irq 74, io mem 0x49000000 [ 2.777575] hub 1-0:1.0: USB hub found [ 2.780050] hub 1-0:1.0: 1 port detected [ 2.789196] ehci-platform 5800d000.usb: EHCI Host Controller [ 2.793527] ehci-platform 5800d000.usb: new USB bus registered, assigned bus number 2 [ 2.802069] ehci-platform 5800d000.usb: irq 75, io mem 0x5800d000 [ 2.829166] ehci-platform 5800d000.usb: USB 2.0 started, EHCI 1.00 [ 2.835387] hub 2-0:1.0: USB hub found [ 2.837820] hub 2-0:1.0: 2 ports detected [ 2.843655] ohci-platform 5800c000.usb: Generic Platform OHCI controller [ 2.848982] ohci-platform 5800c000.usb: new USB bus registered, assigned bus number 3 [ 2.857389] ohci-platform 5800c000.usb: irq 45, io mem 0x5800c000 [ 2.934566] hub 3-0:1.0: USB hub found [ 2.937003] hub 3-0:1.0: 2 ports detected [ 2.944293] input: pmic_onkey as /devices/platform/soc/5c002000.i2c/i2c-1/1-0033/5c002000.i2c:stpmic@33:onkey/input/input0 [ 2.959781] [drm] Initialized stm 1.0.0 20170330 for 5a001000.display-controller on minor 0 [ 3.008138] Console: switching to colour frame buffer device 100x30 [ 3.030009] stm32-display 5a001000.display-controller: [drm] fb0: stmdrmfb frame buffer device [ 3.122904] stm32-dwmac 5800a000.ethernet eth0: PHY [stmmac-0:00] driver [Micrel KSZ8081 or KSZ8091] (irq=POLL) [ 3.132530] stm32-dwmac 5800a000.ethernet eth0: Register MEM_TYPE_PAGE_POOL RxQ-0 [ 3.150511] dwmac4: Master AXI performs any burst length [ 3.154398] stm32-dwmac 5800a000.ethernet eth0: No Safety Features support found [ 3.162079] stm32-dwmac 5800a000.ethernet eth0: IEEE 1588-2008 Advanced Timestamp supported [ 3.170642] stm32-dwmac 5800a000.ethernet eth0: registered PTP clock [ 3.177562] stm32-dwmac 5800a000.ethernet eth0: configuring for phy/rmii link mode [ 3.419113] usb 1-1: new full-speed USB device number 2 using dwc2 [ 3.687148] input: ILITEK ILITEK-TP as /devices/platform/soc/49000000.usb-otg/usb1/1-1/1-1:1.0/0003:222A:0001.0001/input/input1 [ 3.698097] hid-multitouch 0003:222A:0001.0001: input,hidraw0: USB HID v1.10 Device [ILITEK ILITEK-TP] on usb-49000000.usb-otg-1/input0 [ 3.713869] input: ILITEK ILITEK-TP Mouse as /devices/platform/soc/49000000.usb-otg/usb1/1-1/1-1:1.1/0003:222A:0001.0002/input/input2 [ 3.725526] hid-generic 0003:222A:0001.0002: input,hidraw1: USB HID v1.10 Mouse [ILITEK ILITEK-TP] on usb-49000000.usb-otg-1/input1 [ 6.320796] stm32-dwmac 5800a000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx [ 6.359106] IP-Config: Complete: [ 6.360954] device=eth0, hwaddr=0a:7f:53:9f:1a:77, ipaddr=192.168.0.89, mask=255.255.255.0, gw=192.168.0.254 [ 6.371211] host=etra, domain=, nis-domain=(none) [ 6.376377] bootserver=192.168.0.169, rootserver=192.168.0.169, rootpath= [ 6.376828] cfg80211: Loading compiled-in X.509 certificates for regulatory database [ 6.396413] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7' [ 6.401928] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2 [ 6.409626] ALSA device list: [ 6.410396] cfg80211: failed to load regulatory.db [ 6.413189] No soundcards found. [ 6.465895] VFS: Mounted root (nfs filesystem) on device 0:17. [ 6.473236] devtmpfs: mounted [ 6.476923] Freeing unused kernel image (initmem) memory: 1024K [ 6.509601] Run /sbin/init as init process [ 7.164993] systemd[1]: System time before build time, advancing clock. [ 8.858278] NET: Registered PF_INET6 protocol family [ 9.036621] Segment Routing with IPv6 [ 9.038976] In-situ OAM (IOAM) with IPv6 [ 9.249571] systemd[1]: systemd 250.5+ running in system mode (+PAM -AUDIT -SELINUX -APPARMOR +IMA -SMACK -SECCOMP -GCRYPT -GNUTLS -OPENSSL -ACL +BLKID -CURL -ELFUTILS -FIDO2 -IDN2 -IDN +IPTC +KMOD -LIBCRYPTSETUP +LIBFDISK -PCRE2 -PWQUALITY -P11KIT -QRENCODE -BZIP2 -LZ4 -XZ -ZLIB +ZSTD -BPF_FRAMEWORK -XKBCOMMON +UTMP +SYSVINIT default-hierarchy=hybrid) [ 9.281000] systemd[1]: Detected architecture arm. Welcome to ST OpenSTLinux - Weston - (A Yocto Project Based Distro) 4.0.4-snapshot-20230408 (kirkstone)! [ 9.515713] systemd[1]: Hostname set to <desk-mp1>. [ 9.537741] systemd[1]: Initializing machine ID from random generator. [ 9.656925] systemd[1]: Using hardware watchdog 'Software Watchdog', version 0, device /dev/watchdog0 [ 9.664999] systemd[1]: Watchdog running with a timeout of 32s. [ 14.233967] systemd[1]: /lib/systemd/system/mount-partitions.service:9: Standard output type syslog is obsolete, automatically updating to journal. Please update your unit file, and consider removing the setting altogether. [ 14.289772] systemd[1]: Queued start job for default target Multi-User System. [ 14.368558] systemd[1]: Created slice Slice /system/getty. [ OK ] Created slice Slice /system/getty. [ 14.413806] systemd[1]: Created slice Slice /system/modprobe. [ OK ] Created slice Slice /system/modprobe. [ 14.463714] systemd[1]: Created slice Slice /system/serial-getty. [ OK ] Created slice Slice /system/serial-getty. [ 14.503013] systemd[1]: Created slice User and Session Slice. [ OK ] Created slice User and Session Slice. [ 14.540207] systemd[1]: Started Dispatch Password Requests to Console Directory Watch. [ OK ] Started Dispatch Password …ts to Console Directory Watch. [ 14.580065] systemd[1]: Started Forward Password Requests to Wall Directory Watch. [ OK ] Started Forward Password R…uests to Wall Directory Watch. [ 14.620176] systemd[1]: Reached target Path Units. [ OK ] Reached target Path Units. [ 14.659576] systemd[1]: Reached target Remote File Systems. [ OK ] Reached target Remote File Systems. [ 14.699515] systemd[1]: Reached target Slice Units. [ OK ] Reached target Slice Units. [ 14.729577] systemd[1]: Reached target Swaps. [ OK ] Reached target Swaps. [ 14.798763] systemd[1]: Listening on RPCbind Server Activation Socket. [ OK ] Listening on RPCbind Server Activation Socket. [ 14.839771] systemd[1]: Reached target RPC Port Mapper. [ OK ] Reached target RPC Port Mapper. [ 14.883395] systemd[1]: Listening on Syslog Socket. [ OK ] Listening on Syslog Socket. [ 14.949848] systemd[1]: Listening on Process Core Dump Socket. [ OK ] Listening on Process Core Dump Socket. [ 14.990227] systemd[1]: Listening on initctl Compatibility Named Pipe. [ OK ] Listening on initctl Compatibility Named Pipe. [ 15.075919] systemd[1]: Journal Audit Socket was skipped because of a failed condition check (ConditionSecurity=audit). [ 15.089365] systemd[1]: Listening on Journal Socket (/dev/log). [ OK ] Listening on Journal Socket (/dev/log). [ 15.131121] systemd[1]: Listening on Journal Socket. [ OK ] Listening on Journal Socket. [ 15.173872] systemd[1]: Listening on Network Service Netlink Socket. [ OK ] Listening on Network Service Netlink Socket. [ 15.216743] systemd[1]: Listening on udev Control Socket. [ OK ] Listening on udev Control Socket. [ 15.250605] systemd[1]: Listening on udev Kernel Socket. [ OK ] Listening on udev Kernel Socket. [ 15.293212] systemd[1]: Listening on User Database Manager Socket. [ OK ] Listening on User Database Manager Socket. [ 15.330842] systemd[1]: Huge Pages File System was skipped because of a failed condition check (ConditionPathExists=/sys/kernel/mm/hugepages). [ 15.351178] systemd[1]: Mounting POSIX Message Queue File System... Mounting POSIX Message Queue File System... [ 15.398093] systemd[1]: Mounting Kernel Debug File System... Mounting Kernel Debug File System... [ 15.437485] systemd[1]: Mounting Kernel Trace File System... Mounting Kernel Trace File System... [ 15.486853] systemd[1]: Mounting Temporary Directory /tmp... Mounting Temporary Directory /tmp... [ 15.532023] systemd[1]: Starting Create List of Static Device Nodes... Starting Create List of Static Device Nodes... [ 15.578425] systemd[1]: Starting Load Kernel Module configfs... Starting Load Kernel Module configfs... [ 15.618035] systemd[1]: Starting Load Kernel Module drm... Starting Load Kernel Module drm... [ 15.658288] systemd[1]: Starting Load Kernel Module fuse... Starting Load Kernel Module fuse... [ 15.708218] systemd[1]: Starting Mount partitions... Starting Mount partitions... [ 15.754965] systemd[1]: Starting RPC Bind... Starting RPC Bind... [ 15.792506] systemd[1]: File System Check on Root Device was skipped because of a failed condition check (ConditionPathIsReadWrite=!/). [ 15.829805] systemd[1]: Starting Journal Service... Starting Journal Service... [ 15.909746] systemd[1]: Load Kernel Modules was skipped because all trigger condition checks failed. [ 15.940986] systemd[1]: Mounting NFSD configuration filesystem... Mounting NFSD configuration filesystem... [ 16.021919] systemd[1]: Starting Generate network units from Kernel command line... Starting Generate network …ts from Kernel command line... [ 16.071364] systemd[1]: Starting Remount Root and Kernel File Systems... Starting Remount Root and Kernel File Systems... [ 16.125471] systemd[1]: Starting Apply Kernel Variables... Starting Apply Kernel Variables... [ 16.170783] systemd[1]: Starting Coldplug All udev Devices... Starting Coldplug All udev Devices... [ 16.349626] systemd[1]: Started RPC Bind. [ OK ] Started RPC Bind. [ 16.398954] systemd[1]: Mounted POSIX Message Queue File System. [ OK ] Mounted POSIX Message Queue File System. [ 16.418574] systemd[1]: Mounted Kernel Debug File System. [ OK ] Mounted Kernel Debug File System. [ 16.462920] systemd[1]: Mounted Kernel Trace File System. [ OK ] Mounted Kernel Trace File System. [ 16.500812] systemd[1]: Started Journal Service. [ OK ] Started Journal Service. [ OK ] Mounted Temporary Directory /tmp. [ OK ] Finished Create List of Static Device Nodes. [ OK ] Finished Load Kernel Module configfs. [ OK ] Finished Load Kernel Module drm. [ OK ] Finished Load Kernel Module fuse. [ OK ] Finished Mount partitions. [FAILED] Failed to mount NFSD configuration filesystem. See 'systemctl status proc-fs-nfsd.mount' for details. [DEPEND] Dependency failed for NFS server and services. [DEPEND] Dependency failed for NFS Mount Daemon. [ OK ] Finished Generate network units from Kernel command line. [ OK ] Finished Remount Root and Kernel File Systems. [ OK ] Finished Apply Kernel Variables. Mounting FUSE Control File System... Mounting Kernel Configuration File System... [ OK ] Started Starts Psplash Boot screen. Starting Resize root files…to fit available disk space... Starting Flush Journal to Persistent Storage... Starting Create System Users... [ 17.391122] systemd-journald[593]: Received client request to flush runtime journal. [ OK ] Mounted FUSE Control File System. [ OK ] Mounted Kernel Configuration File System. [ OK ] Finished Flush Journal to Persistent Storage. [ OK ] Finished Create System Users. Starting Create Static Device Nodes in /dev... [ OK ] Finished Create Static Device Nodes in /dev. [ OK ] Reached target Preparation for Local File Systems. Mounting /var/volatile... Starting Rule-based Manage…for Device Events and Files... [ OK ] Finished Coldplug All udev Devices. [ OK ] Mounted /var/volatile. Starting Wait for udev To …plete Device Initialization... Starting Load/Save Random Seed... [ OK ] Started Rule-based Manager for Device Events and Files. [ 18.986106] random: crng init done [ OK ] Finished Load/Save Random Seed. [ OK ] Created slice Slice /system/systemd-backlight. Starting Load/Save Screen …ness of backlight:backlight... [ OK ] Finished Load/Save Screen …htness of backlight:backlight. [ 21.174007] galcore: loading out-of-tree module taints kernel. [ 21.392716] Galcore version 6.4.9.436021 [ 21.882137] using random self ethernet address [ 21.907565] using random host ethernet address [ 22.401105] usb0: HOST MAC 5c:c0:78:d3:5c:60 [ 22.403995] usb0: MAC 76:b2:0b:ea:da:0d [ 22.407910] dwc2 49000000.usb-otg: bound driver configfs-gadget [ OK ] Reached target Hardware activated USB gadget. [ OK ] Listening on Load/Save RF …itch Status /dev/rfkill Watch. Starting Load/Save RF Kill Switch Status... [ OK ] Started Load/Save RF Kill Switch Status. [ OK ] Finished Wait for udev To Complete Device Initialization. [ OK ] Finished Resize root files…m to fit available disk space. [ OK ] Reached target Local File Systems. Starting Rebuild Dynamic Linker Cache... Starting Create Volatile Files and Directories... [ OK ] Finished Create Volatile Files and Directories. [FAILED] Failed to start Hardware RNG Entropy Gatherer Daemon. See 'systemctl status rngd.service' for details. Starting Rebuild Journal Catalog... [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Reached target System Time Set. Starting Record System Boot/Shutdown in UTMP... [ OK ] Stopped Network Time Synchronization. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Finished Record System Boot/Shutdown in UTMP. [ OK ] Stopped Network Time Synchronization. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Finished Rebuild Journal Catalog. [ OK ] Stopped Network Time Synchronization. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Stopped Network Time Synchronization. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Stopped Network Time Synchronization. [FAILED] Failed to start Network Time Synchronization. See 'systemctl status systemd-timesyncd.service' for details. [ OK ] Finished Rebuild Dynamic Linker Cache. Starting Update is Completed... [ OK ] Finished Update is Completed. [ OK ] Reached target System Initialization. [ OK ] Started Daily rotation of log files. [ OK ] Started Daily Cleanup of Temporary Directories. [ OK ] Reached target Timer Units. [ OK ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket. [ OK ] Listening on D-Bus System Message Bus Socket. [ OK ] Listening on dropbear.socket. [ OK ] Reached target Socket Units. [ OK ] Reached target Basic System. [ OK ] Started Job spooling tools. [ OK ] Started Periodic Command Scheduler. Starting D-Bus System Message Bus... Starting IPv6 Packet Filtering Framework... Starting IPv4 Packet Filtering Framework... Starting Hold until boot process finishes up... [ OK ] Started System Logging Service. Starting Resets System Activity Logs... syslogd[805]: Error opening log file: /var/log/auth.log: No such file or directory syslogd[805]: Error opening log file: /var/log/syslog: No such file or directory syslogd[805]: Error opening log file: /var/log/kern.log: No such file or directory syslogd[805]: Error opening log file: /var/log/mail.log: No such file or directory [FAILED] Failed to start User Login Management. See 'systemctl status systemd-logind.service' for details. syslogd[805]: Error opening log file: /var/log/mail.err: No such file or directory Starting Userfs cleanup package... syslogd[805]: Error opening log file: /var/log/messages: No such file or directory [ OK ] Finished IPv6 Packet Filtering Framework. [ OK ] Started D-Bus System Message Bus. [ OK ] Finished IPv4 Packet Filtering Framework. [ OK ] Finished Hold until boot process finishes up. [FAILED] Failed to start Resets System Activity Logs. See 'systemctl status sysstat.service' for details. [ OK ] Reached target Preparation for Network. [ OK ] Stopped User Login Management. Starting Load Kernel Module drm... Starting Network Configuration... Starting Check if the gpu …orrect weston configuration... [ OK ] Finished Load Kernel Module drm. [FAILED] Failed to start User Login Management. See 'systemctl status systemd-logind.service' for details. [ OK ] Stopped User Login Management. Starting Load Kernel Module drm... [ OK ] Finished Load Kernel Module drm. [FAILED] Failed to start User Login Management. See 'systemctl status systemd-logind.service' for details. [ OK ] Stopped User Login Management. Starting Load Kernel Module drm... [ OK ] Finished Load Kernel Module drm. [FAILED] Failed to start User Login Management. See 'systemctl status systemd-logind.service' for details. [ OK ] Stopped User Login Management. Starting Load Kernel Module drm... [ OK ] Finished Check if the gpu … correct weston configuration. [ OK ] Started Network Configuration. [ OK ] Finished Load Kernel Module drm. [FAILED] Failed to start User Login Management. See 'systemctl status systemd-logind.service' for details. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. [ OK ] Reached target Network. [ OK ] Reached target Host and Network Name Lookups. Starting Avahi mDNS/DNS-SD Stack... [ OK ] Started IIO Daemon. Starting Real time performance monitoring... [ OK ] Started NFS status monitor for NFSv2/3 locking.. [FAILED] Failed to start Respond to IPv6 Node Information Queries. See 'systemctl status ninfod.service' for details. [FAILED] Failed to start Network Router Discovery Daemon. See 'systemctl status rdisc.service' for details. Starting Permit User Sessions... Starting Target Communication Framework agent... [ OK ] Started Xinetd A Powerful Replacement For Inetd. [FAILED] Failed to start Real time performance monitoring. See 'systemctl status netdata.service' for details. [ OK ] Finished Permit User Sessions. [ OK ] Started Avahi mDNS/DNS-SD Stack. [ OK ] Started Target Communication Framework agent. [ OK ] Started Getty on tty1. [ OK ] Started Serial Getty on ttySTM0. [ OK ] Reached target Login Prompts. [ OK ] Stopped User Login Management. Starting Load Kernel Module drm... [ OK ] Stopped Network Name Resolution. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. [ OK ] Started Weston, a Wayland …mpositor, as a system service. [ OK ] Finished Load Kernel Module drm. [FAILED] Failed to start User Login Management. See 'systemctl status systemd-logind.service' for details. [ OK ] Stopped Network Name Resolution. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. [ OK ] Stopped Network Name Resolution. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. [ OK ] Stopped Network Name Resolution. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. Starting User Database Manager... [ OK ] Stopped Network Name Resolution. [FAILED] Failed to start Network Name Resolution. See 'systemctl status systemd-resolved.service' for details. [ OK ] Started User Database Manager. ST OpenSTLinux - Weston - (A Yocto Project Based Distro) 4.0.4-snapshot desk-mp1 ttySTM0 desk-mp1 login: root (automatic login) alias: gawkpath_default not found alias: gawkpath_prepend not found alias: gawkpath_append not found alias: gawklibpath_default not found alias: gawklibpath_prepend not found alias: gawklibpath_append not found root@desk-mp1:~# ls -l /lib/modules/$(uname -r) total 812 lrwxrwxrwx 1 541 502 63 Jul 26 2023 build -> /home/jenkins/workspace/workspace/DESK-MP1-L-1.x.x_Linux-kernel drwxr-xr-x 2 541 502 4096 Jul 26 2023 extra drwxr-xr-x 10 541 502 4096 Jul 26 2023 kernel -rw-r--r-- 1 541 502 91303 Jul 26 2023 modules.alias -rw-r--r-- 1 541 502 105556 Jul 26 2023 modules.alias.bin -rw-r--r-- 1 541 502 21761 Jul 26 2023 modules.builtin -rw-r--r-- 1 541 502 45829 Jul 26 2023 modules.builtin.alias.bin -rw-r--r-- 1 541 502 24366 Jul 26 2023 modules.builtin.bin -rw-r--r-- 1 541 502 137570 Jul 26 2023 modules.builtin.modinfo -rw-r--r-- 1 541 502 54201 Jul 26 2023 modules.dep -rw-r--r-- 1 541 502 85427 Jul 26 2023 modules.dep.bin -rw-r--r-- 1 541 502 94 Jul 26 2023 modules.devname -rw-r--r-- 1 541 502 26264 Jul 26 2023 modules.order -rw-r--r-- 1 541 502 190 Jul 26 2023 modules.softdep -rw-r--r-- 1 541 502 84407 Jul 26 2023 modules.symbols -rw-r--r-- 1 541 502 108328 Jul 26 2023 modules.symbols.bin lrwxrwxrwx 1 541 502 63 Jul 26 2023 source -> /home/jenkins/workspace/workspace/DESK-MP1-L-1.x.x_Linux-kernel root@desk-mp1:~#
QT5 App[edit | edit source]
To run QT5 applications in the target after booting via NFS it is first necessary to set the environment correctly, to do this you need to execute these 2 commands:
/etc/profile.d/qt-wayland.sh
export XDG_RUNTIME_DIR=/home/weston
Development[edit | edit source]
Synchronizing the git repositories[edit | edit source]
In DESK-MP1-L the following source trees are clones of the correspondent DAVE Embedded Systems git repositories: stm32cubemx.git
Component | GIT Remote |
---|---|
STM32CubeMX Configuration file (.ioc )
|
https://git.dave.eu/git/desk-mp1-l/stm32cubemx.git
|
ATF | https://git.dave.eu/git/desk-mp1-l/arm-trusted-firmware.git
|
U-Boot | https://git.dave.eu/git/desk-mp1-l/u-boot.git
|
Linux kernel | https://git.dave.eu/git/desk-mp1-l/linux.git
|
Boot Image | https://git.dave.eu/git/desk-mp1-l/desk-mp1-boot-image.git
|
Yocto BSP | https://git.dave.eu/git/desk-mp1-l/desk-mp1-l-bsp.git
|
Yocto meta DESK | https://git.dave.eu/git/desk-mp1-l/meta-desk-mp1.git
|
For more information about the access to these repositories, please refer to this link.
Access to DAVE Embedded Systems' git repositories is granted to development kit's owners only. Please refer to this page for detailed instructions on how to get access.
Instructions[edit | edit source]
The components listed in the table above can be kept in sync and up to date with DAVE Embedded Systems' repositories.
Once the git account has been enabled, the developer can:
- clone the repository with the
git clone <git_remote_repository>
command - synchronize a source tree entering the repository directory and launching the
git fetch origin
command.
Please note that git fetch doesn't merge the commits on the current branch. To do that, the developer should run the git merge
command or replace the fetch-merge process with a single git pull
command. Please note that the recommended method is the fetch-merge process. For further information on Git, please refer to the official Git Documentation
Building Boot image[edit | edit source]
Quick reference[edit | edit source]
URL | https://git.dave.eu/git/desk-mp1-l/desk-mp1-boot-image.git |
---|---|
stable branch | desk-mp1-l-1.x.x |
stable tag | desk-mp1-l-1.0.1 |
Platform | SOM ConfigID | CB ConfigID | defconfig |
---|---|---|---|
SBC ETRA | 0x00000001 | 0x00000001 | stm32mp15_desk_mp1_usd_defconfig |
Instructions[edit | edit source]
It is assumed that the development environment has been set up properly as described here.
To build the boot binaries you need to perform this steps:
- start the Linux development VM and login into the system
- open a terminal window and cd into
desk-mp1-boot-image
directory
cd ~/desk-mp1-l/desk-mp1-boot-image
- in case of needs you can update your local repository with the following git command
git pull --recurse-submodules
- configure the build environment
source ~/desk-mp1-l/desk-mp1-l-1.0.1_env.sh
- use the follow script:
build_start.sh
: for build boot binaryATF
+U-boot
, the result can be find onboot-binary-files/uSD/
.build_and_put_to_tftpboot_dir.sh
: for build boot binaryATF
+U-boot
and have the result on/tftpboot/desk-mp1-l/boot-binary-files/uSD/
.
- on each script file there are configuration section
#ATF_MD=SD \ #ATF_LOGLEVEL=50 \ # if you set this, ATF_DEBUG will be ignored #ATF_DEBUG=1 \ #OUTPUT_BINARY="$PWD/boot-binary-files" \ #MAKECONF="-j 6 -l 10" \ UBOOT_DTS=stm32mp157a-dcsb5000dd1r \ UBOOT_DEF=stm32mp15_desk_mp1_usd_defconfig \ ATF_DTS=stm32mp157a-dcsb5000dd1r \ ./build_all.sh
- configurations:
ATF_MD
: default value ->SD
, media device from which to boot.ATF_LOGLEVEL
: default value ->20
, log level of ATF, if you change this value theATF_DEBUG
will be ignored.ATF_DEBUG
: default value ->1
, enable debug.OUTPUT_BINARY
: default value ->"$PWD/boot-binary-files"
, output binary directory.MAKECONF
: default value ->"-j 32 -l 50"
, configuration for makefile.UBOOT_DTS
: no default value, device tree name of u-boot to build, value needed for build!UBOOT_DEF
: no default value, name of defconfig to use on build of u-boot, value needed for build!ATF_DTS
: no default value, devce tree name of ATF to build, value needed for build!
- Default configuration (if not specified the default value is used):
- boot from uSD:
UBOOT_DTS=stm32mp157a-dcsb5000dd1r
UBOOT_DEF=stm32mp15_desk_mp1_usd_defconfig
ATF_DTS=stm32mp157a-dcsb5000dd1r
- boot from uSD:
i.e.
./build_start.sh
Building Linux[edit | edit source]
Quick reference[edit | edit source]
URL | https://git.dave.eu/git/desk-mp1-l/linux.git |
---|---|
stable branch | desk-mp1-l-1.x.x |
stable tag | desk-mp1-l-1.0.1 |
defconfig | multi_v7_desk_mp1_defconfig | |
---|---|---|
Kernel binary | UIMAGE_LOADADDR=0xC2000040 uImage | |
Device trees | Platform | DTB |
SBC ETRA | stm32mp157a-dcsb5000dd1r.dtb |
Instructions[edit | edit source]
It is assumed that the development environment has been set up properly as described here.
- start the Linux development VM and login into the system
- open a terminal window and cd into Linux kernel source code
cd ~/desk-mp1-l/linux
- in case of needs you can update your local repository with the following git command
git pull
- configure the build environment
source ~/desk-mp1-l/desk-mp1-l-1.0.1_env.sh
- enter the source tree directory and run the following commands:
make multi_v7_desk_mp1_defconfig make LOADADDR=0xC2000040 uImage stm32mp157a-dcsb5000dd1r.dtb
NOTE: this is the default configuration suitable for latest target.
- The former command selects the default DESK-MP1-L configuration, while the latter builds the kernel binary image with the required u-boot header and the kernel device tree.
Default Linux kernel configuration can be changed by using the standard menuconfig
, xconfig
, or gconfig
make target. Subsequent builds just require uImage
make target to update the binary image. Once the build process is complete, the kernel binary image is stored into the arch/arm/boot/uImage
file. Both this file and the kernel device tree can be copied to the tftp root directory /tftpboot/desk-mp1-l/
with the following commands:
cp arch/arm/boot/uImage /tftpboot/desk-mp1-l/ cp arch/arm/boot/dts/*.dtb /tftpboot/desk-mp1-l/
Usually, kernel modules are installed with make modules_install
command, but this method installs the modules into the /lib/modules
directory of you MVM, which is not what you want.
A better way to deploy kernel modules while cross-compiling is
- generate a
.tar.gz
archive - install this archive into the target root file system
User can create such an archive, for example, using the following commands:
make modules mkdir modules-install make INSTALL_MOD_PATH=modules-install modules_install cd modules-install && tar cvzf ../modules.tar.gz . && cd ..
Now copy modules.tar.gz
into the target root file system and install them as root with the following command
tar xvzf modules.tar.gz -C /
Building the Yocto BSP[edit | edit source]
Quick reference[edit | edit source]
Repository Information | ||
---|---|---|
Repository | BSP Manifest | Yocto BSP Layer |
URL | https://git.dave.eu/git/desk-mp1-l/desk-mp1-l-bsp.git | https://git.dave.eu/git/desk-mp1-l/meta-desk-mp1.git |
stable branch | kirkstone | kirkstone |
stable tag | desk-mp1-l-1.0.1 | desk-mp1-l-1.0.1 |
Build targets | ||
---|---|---|
Distro | Image name | Description |
openstlinux-eglfs | dave-image-devel | This image include tools for development/debugging |
openstlinux-weston | dave-image-qt5-weston | In addition dave-image-devel , this image provides Qt5 libraries using the weston backend with wayland server
|
Introduction[edit | edit source]
As known, in addition to a bootloader and the o.s. kernel, an embedded Linux system needs a root file system to operate. The root file system must contain everything needed to support the Linux system (applications, settings, data, etc.). The root file system is the file system that is contained on the same partition on which the root directory is located. The Linux kernel, at the end of its startup stage, mounts the root file system on the configured root device and finally launches the /sbin/init
, the first user space process and "father" of all the other processes.
For more information on the Linux filesystem, please refer to http://www.thegeekstuff.com/2010/09/linux-file-system-structure/.
desk-mp1-l provides one (or more) pre-built root file system, that can be used during the evaluation/development/deployment cycle. For instance, the root file system included in the dave-image-qt5-weston
image is suited for the development phase, since it provides a relatively rich set of packages including tools and libraries used to debug the application code. The pre-built root file systems are located here: /home/dvdk/<target_name>/rfs/<kit_name>
.
Besides the pre-built root file systems, DAVE also provides a rich repository containing pre-built applications and libraries. These packages can be easily installed on the target by using the apt-get
tool. Please refer to this section for more details.
To generate the supported root file systems, the build of the Yocto BSP has to be run. The output of this process is an image containing the U-Boot binary file, the Linux kernel image, and the selected root file system image. The following sections describe in detail how to execute this operation.
For more general information regarding the Yocto build system, please refer the dedicated category page.
Yocto build system can be cumbersome and its learning curve is generally quite steep for developers who have no or little familiarity with the embedded Linux world. For these reasons, "yoctoization" of users' applications as described here may be a hard task. DAVE Embedded Systems, however, can provide consultant services to support our customers dealing with such issues. For more details, please contact our Sales Department. |
How to build the Yocto BSP images including the U-Boot binary file, the Linux kernel image, and the target root file system image[edit | edit source]
The following procedure requires the access to the DAVE Embedded Systems' git repositories. The access to such repositories is granted to development kit's owners only. Please refer to this page for detailed instructions on how to get it. |
This process requires a lot of hardware resources in terms of disk storage, RAM, and processing power. For this reason, it also is recommended to consider the use of a physical machine. For more details on this topic, please refer to this document which talks about the advanced use of the Yocto build system. |
Initialize the build environment[edit | edit source]
Before running the build, the environment must be initialized properly.
desk-mp1-l Yocto BSP uses git-repo tool to fetch all the required git repositories. To install it, please use the following commands:
dvdk@vagrant:~/desk-mp1-l$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo-1 > repo dvdk@vagrant:~/desk-mp1-l$ chmod a+x repo dvdk@vagrant:~/desk-mp1-l$ ./repo init -u https://git.dave.eu/git/desk-mp1-l/desk-mp1-l-bsp.git -b refs/tags/desk-mp1-l-1.0.1 dvdk@vagrant:~/desk-mp1-l$ ./repo sync dvdk@vagrant:~/desk-mp1-l$ EULA=1 DISTRO=openstlinux-weston MACHINE=desk-mp1 source ./desk-setup-release.sh
Running the build[edit | edit source]
Please note that even the basic root file system requires a few hours to build on a mid/hi range desktop (4-8 cores, 16-32 GiB RAM) also depending on your Internet connection speed (all sources are fetched from the network). Nearly 100GiB of disk space is required for the build. The process may be slowed down significantly since the performances of a virtual machine are reduced if compared to the physical hardware. Thus, it's recommended to check the hardware capabilities of the host system and, when building with Yocto is required, to consider the following options:
- Migrating the build system to a physical machine
- Assuming that the host system has the required resources, extending the hardware capabilities of the default MVM (e.g. adding more cores and disk space).
Once completed the initialization phase, developers can launch the Yocto image build process with the following commands:
dvdk@vagrant:~/desk-mp1-l/build$ bitbake <target-image-name>
Where <target-image-name>
is one of the images listed in here.
Once the build process is completed, the resulting files (the ATF, U-Boot binaries, the Linux kernel image, the device tree blob, the .tar.xz compressed root file system image, etc.) will be available in build/tmp/deploy/images/desk-mp1-l
. The artifacts produces by the build process include WIC files as well. These files are partitioned images used to create bootable SD cards as detailed here.
Generating the SDKs[edit | edit source]
After creating an image as described in the previous version, the corresponding SDK can be generated by issuing the following command:
bitbake <target-image-name> -c populate-sdk
Again, replace <target-image-name>
with one of the images listed in here.
Building additional packages[edit | edit source]
To build additional packages:
dvdk@vagrant:~/desk-mp1-l$ EULA=1 DISTRO=openstlinux-weston MACHINE=desk-mp1 source ./desk-setup-release.sh dvdk@vagrant:~/desk-mp1-l/build$
And then can run any of the bitbake command.
dvdk@vagrant:~/desk-mp1-l/build$ bitbake memtester
The resulting packages can be found inside build/tmp-glibc/deploy/deb.
dvdk@vagrant:~/desk-mp1-l/build$ ls -l tmp-glibc/deploy/deb/cortexa7t2hf-neon-vfpv4/memtester* -rw-r--r-- 2 dvdk dvdk 17712 Mar 1 08:57 tmp-glibc/deploy/deb/cortexa7t2hf-neon-vfpv4/memtester-dbg_4.5.1-r0.0_armhf.deb -rw-r--r-- 2 dvdk dvdk 904 Mar 1 08:57 tmp-glibc/deploy/deb/cortexa7t2hf-neon-vfpv4/memtester-dev_4.5.1-r0.0_armhf.deb -rw-r--r-- 2 dvdk dvdk 3096 Mar 1 08:57 tmp-glibc/deploy/deb/cortexa7t2hf-neon-vfpv4/memtester-doc_4.5.1-r0.0_armhf.deb -rw-r--r-- 2 dvdk dvdk 6432 Mar 1 08:57 tmp-glibc/deploy/deb/cortexa7t2hf-neon-vfpv4/memtester-src_4.5.1-r0.0_armhf.deb -rw-r--r-- 2 dvdk dvdk 6492 Mar 1 08:57 tmp-glibc/deploy/deb/cortexa7t2hf-neon-vfpv4/memtester_4.5.1-r0.0_armhf.deb
Hello word example[edit | edit source]
Here below an example on C code displaying the classic Hello World! message on the target serial console.
This example shows how to use the arm cross-compiler using the environment configured for this purpose
Setting the cross-compiler[edit | edit source]
- start the Linux development VM and login into the system
- open a terminal window and cd into your source code directory
dvdk@vagrant:~$ mkdir myproject dvdk@vagrant:~$ cd myproject/ dvdk@vagrant:~/myproject$ vi hello.c dvdk@vagrant:~/myproject$ cat hello.c #include <stdio.h> int main(){ printf("Hello, World!\n"); return 0; }
- configure the build environment
dvdk@vagrant:~/myproject$ source /home/dvdk/desk-mp1-l/desk-mp1-l-1.0.1_env.sh
- as you can see here below, the
$CC
environment variable has been properly configured for using the SDKsysroot
parameter:
dvdk@vagrant:~/myproject$ echo $CC arm-ostl-linux-gnueabi-gcc -mthumb -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/opt/yocto/sdk/desk-mp1-l/desk-mp1-l-1.0.1/sysroots/cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi dvdk@vagrant:~/myproject$
- invoke the cross-compiler for compiling your source code example: the object file obtained, is a proper ELF 32-bit for the target microprocessor
dvdk@vagrant:~/myproject$ $CC hello.c -o hello dvdk@vagrant:~/myproject$ file hello hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, BuildID[sha1]=70fc28d38cfb763980920bd9c16765823ed4b087, for GNU/Linux 3.2.0, with debug_in dvdk@vagrant:~/myproject$
Running the example on the target[edit | edit source]
Now it is enough to copy the object file in the /home/root
rfs directory and boot from nfs...
dvdk@vagrant:~/myproject$ sudo cp hello /home/dvdk/desk-mp1-l/rfs/desk-mp1-l/home/root/ dvdk@vagrant:~/myproject$ sudo ls -la /home/dvdk/desk-mp1-l/rfs/desk-mp1-l/home/root/ total 28 drwx------ 2 root root 4096 Aug 1 08:21 . drwxr-xr-x 4 root root 4096 Sep 20 2022 .. -rwxr-xr-x 1 root root 11980 Aug 1 08:21 hello -rw-r--r-- 1 root root 959 Sep 20 2022 .profile -rw-r--r-- 1 root root 238 Sep 20 2022 README-CHECK-GPU dvdk@vagrant:~/myproject$
on the target:
root@desk-mp1:~# ls -la total 32 drwx------ 2 root root 4096 Aug 1 2023 . drwxr-xr-x 4 root root 4096 Sep 20 2022 .. -rw------- 1 root root 13 Aug 1 2023 .ash_history -rw-r--r-- 1 root root 959 Sep 20 2022 .profile -rw-r--r-- 1 root root 238 Sep 20 2022 README-CHECK-GPU -rwxr-xr-x 1 root root 11980 Aug 1 2023 hello root@desk-mp1:~# ./hello Hello, World! root@desk-mp1:~#
Deployment[edit | edit source]
Customizing the splash screen[edit | edit source]
The following U-Boot environment variables are required for the splash image display when u-boot starts:
splashimage
: RAM address where the BMP image is loaded. Please note that it must be a 32-bit (eg:0xc4100000
)splashfile
: image name to load and then display at boot. (eg:splash_landscape.bmp
)
U-Boot variables example[edit | edit source]
splashimage=0xc4100000 splashfile=splash_landscape.bmp
How to update splashscreen image[edit | edit source]
As an example, you can update the splash image with the following steps:
- connect the uSD to the host
- mount the boot partition (eg:
sudo mount /dev/sdb8 /mnt
) - copy on
/mnt
partition the image with this name:splash_landscape.bmp
- umount the uSD and excecute the boot
How to configure the network interfaces[edit | edit source]
For deploying an Embedded System, one of the most important configuration is the Network Interface configuration.
Once the Embedded Device is finally configured for stand-alone bootstrap, the network interface should be configured for reaching the device remotely via network connections like ssh, telnet, ftp, http, etc.
This Application Note briefly describes how it is possible to simply configure the network interfaces on systemd
Resources[edit | edit source]
For further details on network configuration, please refer - for example - to:
Examples[edit | edit source]
The following configuration assumptions are used in the paragraphs shown below:
- IP address range of the LAN network 192.168.1.0 - 192.168.1.255
- IP address of the gateway 192.168.1.254
- IP address of the device 192.168.1.100
systemd[edit | edit source]
The network configuration for systemd are basically found in the /etc/systemd/network/
directory.
The most simply way for configuring the network interface is to create/edit the file /etc/systemd/network/1-eth0.network as per the following paragraphs. In the event that there are another network interface, then this must be create/edit as /etc/systemd/network/1-eth0.network.
Static IP address[edit | edit source]
Here below, an example for configuring eth0
ethernet interface.
[Match] Name=eth0 # Prevent the interface loading if the kernel boots from nfs KernelCommandLine=!nfsroot [Network] Address=192.168.1.100 Gateway=192.168.1.254 DNS=192.168.1.1
Once modified, the networkd
service should be resarted:
systemctl restart systemd-networkd
Dynamic IP addres (DHCP)[edit | edit source]
The network interface can be configured - using a proper DHCP server on the network - using the DHCP key in the configuration file as the following:
[Match] Name=eth0 # Prevent the interface loading if the kernel boots from nfs KernelCommandLine=!nfsroot [Network] DHCP=yes
When systemd network starts, it tries to use a DHCP server present in the network to configure the interface.
DNS[edit | edit source]
The DNS key (in the configuration file) is used only if the systemd-resolved service is enabled and the /etc/resolv.conf has a symbolic link to /run/systemd/resolve/stub-resolv.conf
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
Once modified, the resolved
service should be resarted:
systemctl restart systemd-resolved
loopback network interface[edit | edit source]
systemd contains native implementations of various tasks that need to be executed as part of the boot process.
For example, it sets the hostname or configures the loopback network device.
Apply configuration changes[edit | edit source]
After editing the above files, changes are applied after reboot or by restarting systemd-networkd.service
:
root@desk-mp1:~# systemctl restart systemd-networkd.service
MAC Address programming[edit | edit source]
Every network adapter has a Media Access Control address (usually shortened to MAC address). A MAC address is a six-byte identifying number permanently embedded in the firmware of the adapter, and is readable by the network and the operating system of the device on which the adapter is installed.
The address must follow the standards set by the Institute of Electrical and Electronics Engineers (IEEE), which sets computer networking standards.
The MAC address is a six-pair set of hexadecimal numbers, for example a1-c2-e3-44-5f-6d
. Specifically, in Ethernet, the MAC address is known as the Ethernet Address, which is the unique ID serial number of the Ethernet device in one's computer. MAC Addresses are used in a Local Area Network (LAN) by computers to communicate with each other. Every adapter has a unique MAC address.
Platform supported[edit | edit source]
In this Application Note, we will describe how to use the ETRA eFuse for programming and using the MAC address(es) and it applies to the following DAVE ETRA family
products:
This Application Note has been validated in the ETRA SOM. |
Obtaining a MAC address[edit | edit source]
To obtain a MAC address for your organization, please refer to our Setting the MAC address wiki page with the overall information about this topic.
Permanent storage areas[edit | edit source]
Some SOCs provide programmable OTPs for security, MAC address, boot modes, etc. Usually, some of these are general-purpose registers and can be managed by the user.
In other cases, an external permanent storage device can be used for storing permanent settings like the MAC address: for the ETRA product family, DAVE proposes to use the General Purposes eFuses (OTP blocks) on SoC itself for storing permanently the MAC address(es).
MAC address programming on ETRA family[edit | edit source]
MAC address configuration in u-boot[edit | edit source]
If the MAC address is not already programmed in the OTPs and the ethaddr
u-boot variable is not set, u-boot assignes a random value (different at every power on cycle):
Net: Warning: ethernet@5800a000 (eth0) using random MAC address - d6:39:06:41:0f:b2 eth0: ethernet@5800a000
If the ethaddr
is set and saved in the u-boot environment, its value is used as the MAC Address:
u-boot=> setenv ethaddr 00:50:c2:1e:af:a8 u-boot=> saveenv Saving Environment to MMC... Writing to MMC(0)... OK u-boot=>
eFuse bank registers[edit | edit source]
ETRA family uses the Bank0 Word 57, Word 58 for storing the MAC address. The MAC values should be properly divided in two registers for correct programming.
The related 57, 58, OTP registers will be used for the purposes illustrated in this AN.
Warning!! eFuse programming is a permanent and non-reversible action. Pay attention to the values and commands used during MAC programming. |
eth0 read current value[edit | edit source]
U-boot uses the fuse sense
command to read the MAC address value into the eFuse
STM32MP> fuse sense 0 57 2 Sensing bank 0: Word 0x00000039: 00000000 00000000
If it is all zero there should also be the following print from U-Boot invalid MAC address 0 in OTP 00:00:00:00:00:00
.
If the present MAC address is not valid, a random one is generated.
To check if the OTPs have been blocked execute use the fuse sense
command, the address to use is calculated as follows:
OTP 57 (decimal) -> 0x39 (Hex) as shown by the output of the previous command (Word 0x00000039: XXXXXXXX YYYYYYYY
), add on address this value 0x10000000
-> 0x10000039
STM32MP> fuse sense 0 0x10000039 2 Sensing bank 0: Word 0x10000039: 00000000 00000000
If the value is 0 in both cells, they have not been locked.
If the value is 40000000 the cell has been locked.
eth0 eFuse programming[edit | edit source]
U-Boot uses the fuse prog
command for writing the MAC address into the eFuse. The MAC address should be divided in two parts, for example MAC address AB:CD:12:34:56:78
for eth0 is then divided into :
fuse prog 0 57 0x12cd34ab fuse prog 0 58 0x00007856
In the following example the MAC address 2A:01:7A:9F:3E:20
is stored in the SOC:
- (in case of presence) clear the
ethaddr
u-boot variable
u-boot=> setenv ethaddr u-boot=> saveenv Saving Environment to MMC... Writing to MMC(1)... OK
- program the MAC address in the OPTs with the following commands:
STM32MP> fuse prog 0 57 0x9f7a012a 0x0000203e Programming bank 0 word 0x00000039 to 0x9f7a012a... Warning: Programming fuses is an irreversible operation! This may brick your system. Use this command only if you are sure of what you are doing! Really perform this fuse programming? <y/N> y Programming bank 0 word 0x0000003a to 0x0000203e... Warning: Programming fuses is an irreversible operation! This may brick your system. Use this command only if you are sure of what you are doing! Really perform this fuse programming? <y/N> y STM32MP>
If you want to write the eFuse value directly without confirmation, uses the -y
parameter with the fuse prog
command, as per the previous example:
STM32MP> fuse prog -y 0 57 0x9f7a012a 0x0000203e Programming bank 0 word 0x00000039 to 0x9f7a012a... Programming bank 0 word 0x0000003a to 0x0000203e...
At the next boot, the ethaddr
value wil be read from the OPTs:
STM32MP> pri ethaddr ethaddr=2a:01:7a:9f:3e:20 STM32MP>
eFuse locking[edit | edit source]
The OTP eFuse registers should be locked in order to avoid unwanted registers (and then MAC addresses) modifications. OTP lock grants the MAC values cannot be modified anymore.
If not locked yet, OTP bits can be set to '1' but not reversed to '0' value, so some modifications can be applied if the eFuse registers are not locked. |
The registers lock can be forced using the following command:
STM32MP> fuse prog 0 0x10000039 0x40000000 0x40000000 STM32MP> fuse sense 0 0x10000039 2 Sensing bank 0: Word 0x10000039: 40000000 40000000 STM32MP>
eFuse reading[edit | edit source]
The eFuse registers can be read - after programming - for checking the written values:
STM32MP> fuse sense 0 57 2 Sensing bank 0: Word 0x00000039: 9f7a012a 0000203e STM32MP>
Linux kernel MAC address[edit | edit source]
The MAC Address configured in u-boot is passed to the kernel which configures the eth0
peripherals with the correct values:
root@desk-mp1:~# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.89 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::2801:7aff:fe9f:3e20 prefixlen 64 scopeid 0x20<link> ether 2a:01:7a:9f:3e:20 txqueuelen 1000 (Ethernet) RX packets 199 bytes 19957 (19.4 KiB) RX errors 0 dropped 5 overruns 0 frame 0 TX packets 58 bytes 7816 (7.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 44 base 0xa000 root@desk-mp1:~#
Peripherals[edit | edit source]
DESK-MP1-L/Pheripherals/Ethernet DESK-MP1-L/Pheripherals/LCD DESK-MP1-L/Pheripherals/Touchscreen DESK-MP1-L/Pheripherals/micro SD DESK-MP1-L/Pheripherals/UARTs DESK-MP1-L/Pheripherals/USB Host DESK-MP1-L/Pheripherals/USB OTG DESK-MP1-L/Pheripherals/RTC DESK-MP1-L/Pheripherals/DWS DESK-MP1-L/Pheripherals/GPIOs