diff --git a/common/yocto-imx93-frdm-labs-vars.tex b/common/yocto-imx93-frdm-labs-vars.tex new file mode 100644 index 0000000000..33d6ef062e --- /dev/null +++ b/common/yocto-imx93-frdm-labs-vars.tex @@ -0,0 +1,2 @@ +\def\board{imx93-frdm} +\def\boarddescription{i.MX93 FRDM} diff --git a/lab-data/yocto-imx93-frdm/bootlin-lab-data/nunchuk/linux/0001-Add-nunchuk-driver.patch b/lab-data/yocto-imx93-frdm/bootlin-lab-data/nunchuk/linux/0001-Add-nunchuk-driver.patch new file mode 100644 index 0000000000..236f6ebce8 --- /dev/null +++ b/lab-data/yocto-imx93-frdm/bootlin-lab-data/nunchuk/linux/0001-Add-nunchuk-driver.patch @@ -0,0 +1,262 @@ +From d39c48a071eb30802429a9ecd405734fdd67f2c5 Mon Sep 17 00:00:00 2001 +From: Antoine Picard +Date: Mon, 11 Aug 2025 15:04:00 +0200 +Subject: [PATCH 1/2] Add nunchuk driver + +Signed-off-by: Antoine Picard +--- + drivers/input/joystick/Kconfig | 13 ++ + drivers/input/joystick/Makefile | 1 + + drivers/input/joystick/wiichuck.c | 204 ++++++++++++++++++++++++++++++ + 3 files changed, 218 insertions(+) + create mode 100644 drivers/input/joystick/wiichuck.c + +diff --git a/drivers/input/joystick/Kconfig b/drivers/input/joystick/Kconfig +index ac6925ce8366..e155f724b789 100644 +--- a/drivers/input/joystick/Kconfig ++++ b/drivers/input/joystick/Kconfig +@@ -207,6 +207,19 @@ config JOYSTICK_TWIDJOY + To compile this driver as a module, choose M here: the + module will be called twidjoy. + ++config JOYSTICK_WIICHUCK ++ tristate "Nintendo Wiimote Extension connector on i2c bus" ++ depends on I2C ++ select INPUT_POLLDEV ++ help ++ Say Y here if you have a Nintendo Wiimote extension connector ++ attached directly to an i2c bus, like the Sparcfun Wiichuck adapter ++ board. This driver supports both the Nunchuk and the Classic ++ Controller extensions. ++ ++ To compile this driver as a module, choose M here: the ++ modules will be called wiichuck. ++ + config JOYSTICK_ZHENHUA + tristate "5-byte Zhenhua RC transmitter" + select SERIO +diff --git a/drivers/input/joystick/Makefile b/drivers/input/joystick/Makefile +index 3937535f0098..7dee2e46303d 100644 +--- a/drivers/input/joystick/Makefile ++++ b/drivers/input/joystick/Makefile +@@ -38,5 +38,6 @@ obj-$(CONFIG_JOYSTICK_TURBOGRAFX) += turbografx.o + obj-$(CONFIG_JOYSTICK_TWIDJOY) += twidjoy.o + obj-$(CONFIG_JOYSTICK_WARRIOR) += warrior.o + obj-$(CONFIG_JOYSTICK_WALKERA0701) += walkera0701.o ++obj-$(CONFIG_JOYSTICK_WIICHUCK) += wiichuck.o + obj-$(CONFIG_JOYSTICK_XPAD) += xpad.o + obj-$(CONFIG_JOYSTICK_ZHENHUA) += zhenhua.o +diff --git a/drivers/input/joystick/wiichuck.c b/drivers/input/joystick/wiichuck.c +new file mode 100644 +index 000000000000..9ba1c5b82a9b +--- /dev/null ++++ b/drivers/input/joystick/wiichuck.c +@@ -0,0 +1,204 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* Available on SOLUTION_URL */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* Per device structure */ ++struct nunchuk_dev { ++ struct i2c_client *i2c_client; ++}; ++ ++static int nunchuk_read_registers(struct i2c_client *client, u8 *recv) ++{ ++ u8 buf[1]; ++ int ret; ++ ++ /* Ask the device to get ready for a read */ ++ usleep_range(10000, 20000); ++ ++ buf[0] = 0x00; ++ ret = i2c_master_send(client, buf, 1); ++ if (ret < 0) { ++ dev_err(&client->dev, "i2c send failed (%d)\n", ret); ++ return ret; ++ } ++ ++ usleep_range(10000, 20000); ++ ++ /* Now read registers */ ++ ret = i2c_master_recv(client, recv, 6); ++ if (ret < 0) { ++ dev_err(&client->dev, "i2c recv failed (%d)\n", ret); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static void nunchuk_poll(struct input_dev *input) ++{ ++ u8 recv[6]; ++ int zpressed, cpressed, bx, by; ++ ++ /* Retrieve the physical i2c device */ ++ struct nunchuk_dev *nunchuk = input_get_drvdata(input); ++ struct i2c_client *client = nunchuk->i2c_client; ++ ++ /* Get the state of the device registers */ ++ if (nunchuk_read_registers(client, recv) < 0) ++ return; ++ ++ zpressed = (recv[5] & BIT(0)) ? 0 : 1; ++ cpressed = (recv[5] & BIT(1)) ? 0 : 1; ++ bx = recv[0]; ++ by = recv[1]; ++ ++ /* Send events to the INPUT subsystem */ ++ input_report_key(input, BTN_Z, zpressed); ++ input_report_key(input, BTN_C, cpressed); ++ ++ input_report_abs(input, ABS_X, bx); ++ input_report_abs(input, ABS_Y, by); ++ ++ input_sync(input); ++} ++ ++static int nunchuk_probe(struct i2c_client *client) ++{ ++ struct nunchuk_dev *nunchuk; ++ struct input_dev *input; ++ u8 buf[2]; ++ int ret; ++ ++ /* Allocate per device structure */ ++ nunchuk = devm_kzalloc(&client->dev, sizeof(*nunchuk), GFP_KERNEL); ++ if (!nunchuk) ++ /* No message necessary here, already issued by allocation functions */ ++ return -ENOMEM; ++ ++ /* Initialize device */ ++ buf[0] = 0xf0; ++ buf[1] = 0x55; ++ ++ ret = i2c_master_send(client, buf, 2); ++ if (ret < 0) { ++ dev_err(&client->dev, "i2c send failed (%d)\n", ret); ++ return ret; ++ } ++ ++ udelay(1000); ++ ++ buf[0] = 0xfb; ++ buf[1] = 0x00; ++ ++ ret = i2c_master_send(client, buf, 2); ++ if (ret < 0) { ++ dev_err(&client->dev, "i2c send failed (%d)\n", ret); ++ return ret; ++ } ++ ++ /* Allocate input device */ ++ input = devm_input_allocate_device(&client->dev); ++ if (!input) ++ return -ENOMEM; ++ ++ /* ++ * Implement pointers from logical to physical. Here, no need for ++ * physical to logical pointers as unregistering and freeing the ++ * polled_input device will be automatic. ++ */ ++ nunchuk->i2c_client = client; ++ input_set_drvdata(input, nunchuk); ++ ++ /* Configure input device */ ++ input->name = "Wii Nunchuk"; ++ input->id.bustype = BUS_I2C; ++ ++ set_bit(EV_KEY, input->evbit); ++ set_bit(BTN_C, input->keybit); ++ set_bit(BTN_Z, input->keybit); ++ ++ set_bit(EV_ABS, input->evbit); ++ set_bit(ABS_X, input->absbit); ++ set_bit(ABS_Y, input->absbit); ++ input_set_abs_params(input, ABS_X, 30, 220, 4, 8); ++ input_set_abs_params(input, ABS_Y, 40, 200, 4, 8); ++ ++ /* Classic buttons */ ++ set_bit(BTN_TL, input->keybit); ++ set_bit(BTN_SELECT, input->keybit); ++ set_bit(BTN_MODE, input->keybit); ++ set_bit(BTN_START, input->keybit); ++ set_bit(BTN_TR, input->keybit); ++ set_bit(BTN_TL2, input->keybit); ++ set_bit(BTN_B, input->keybit); ++ set_bit(BTN_Y, input->keybit); ++ set_bit(BTN_A, input->keybit); ++ set_bit(BTN_X, input->keybit); ++ set_bit(BTN_TR2, input->keybit); ++ ++ /* Register and configure polling function */ ++ ret = input_setup_polling(input, nunchuk_poll); ++ if (ret) { ++ dev_err(&client->dev, "Failed to set polling function (%d)\n", ++ ret); ++ return ret; ++ } ++ ++ input_set_poll_interval(input, 50); ++ ++ /* Register the input device when everything is ready */ ++ ret = input_register_device(input); ++ if (ret) { ++ dev_err(&client->dev, "Cannot register input device (%d)\n", ++ ret); ++ return ret; ++ } ++ ++ ++ pr_info("Nunchuk device probed successfully\n"); ++ return 0; ++} ++ ++#if KERNEL_VERSION(5, 16, 0) <= LINUX_VERSION_CODE ++static void nunchuk_remove(struct i2c_client *client) ++#else ++static int nunchuk_remove(struct i2c_client *client) ++#endif ++{ ++ /* ++ * Nothing to do here, as the polled_input device is automatically ++ * unregistered and freed thanks to the use of ++ * devm_input_allocate_device. ++ */ ++ ++ pr_info("Nunchuk device removed successfully\n"); ++ #if KERNEL_VERSION(5, 16, 0) > LINUX_VERSION_CODE ++ return 0; ++ #endif ++} ++ ++/* Specification of supported Device Tree devices */ ++static const struct of_device_id nunchuk_dt_match[] = { ++ { .compatible = "nintendo,nunchuk" }, ++ { }, ++}; ++MODULE_DEVICE_TABLE(of, nunchuk_dt_match); ++ ++/* Driver declaration */ ++static struct i2c_driver nunchuk_driver = { ++ .driver = { ++ .name = "nunchuk", ++ .of_match_table = nunchuk_dt_match, ++ }, ++ .probe = nunchuk_probe, ++ .remove = nunchuk_remove, ++}; ++module_i2c_driver(nunchuk_driver); ++ ++MODULE_LICENSE("GPL"); +\ No newline at end of file +-- +2.43.0 + diff --git a/lab-data/yocto-imx93-frdm/bootlin-lab-data/nunchuk/linux/defconfig b/lab-data/yocto-imx93-frdm/bootlin-lab-data/nunchuk/linux/defconfig new file mode 100644 index 0000000000..8893ad1ad5 --- /dev/null +++ b/lab-data/yocto-imx93-frdm/bootlin-lab-data/nunchuk/linux/defconfig @@ -0,0 +1,1147 @@ +CONFIG_LOCALVERSION="-lf-6.6.y" +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_AUDIT=y +CONFIG_NO_HZ_IDLE=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_JIT=y +CONFIG_PREEMPT=y +CONFIG_IRQ_TIME_ACCOUNTING=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_TASKSTATS=y +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_NUMA_BALANCING=y +CONFIG_MEMCG=y +CONFIG_BLK_CGROUP=y +CONFIG_CGROUP_PIDS=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_HUGETLB=y +CONFIG_CPUSETS=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_BPF=y +CONFIG_USER_NS=y +CONFIG_SCHED_AUTOGROUP=y +CONFIG_RELAY=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_KALLSYMS_ALL=y +CONFIG_PROFILING=y +CONFIG_KEXEC=y +CONFIG_KEXEC_FILE=y +CONFIG_CRASH_DUMP=y +CONFIG_ARCH_KEEMBAY=y +CONFIG_ARCH_NXP=y +CONFIG_ARCH_LAYERSCAPE=y +CONFIG_ARCH_MXC=y +CONFIG_ARCH_S32=y +CONFIG_SOC_S32V234=y +CONFIG_ARM64_VA_BITS_48=y +CONFIG_SCHED_MC=y +CONFIG_SCHED_SMT=y +CONFIG_NUMA=y +CONFIG_XEN=y +CONFIG_ARCH_FORCE_MAX_ORDER=13 +CONFIG_COMPAT=y +CONFIG_RANDOMIZE_BASE=y +CONFIG_PM_DEBUG=y +CONFIG_PM_TEST_SUSPEND=y +CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +CONFIG_ENERGY_MODEL=y +CONFIG_ARM_PSCI_CPUIDLE=y +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y +CONFIG_CPUFREQ_DT=y +CONFIG_ACPI_CPPC_CPUFREQ=m +CONFIG_ARM_SCPI_CPUFREQ=y +CONFIG_ARM_IMX_CPUFREQ_DT=y +CONFIG_ARM_SCMI_CPUFREQ=y +CONFIG_QORIQ_CPUFREQ=y +CONFIG_ACPI=y +CONFIG_ACPI_APEI=y +CONFIG_ACPI_APEI_GHES=y +CONFIG_ACPI_APEI_MEMORY_FAILURE=y +CONFIG_ACPI_APEI_EINJ=y +CONFIG_VIRTUALIZATION=y +CONFIG_KVM=y +CONFIG_JUMP_LABEL=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODVERSIONS=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +# CONFIG_COMPAT_BRK is not set +CONFIG_KSM=y +CONFIG_MEMORY_FAILURE=y +CONFIG_TRANSPARENT_HUGEPAGE=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_TLS=y +CONFIG_TLS_DEVICE=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IPV6_SIT=m +CONFIG_NETFILTER=y +CONFIG_BRIDGE_NETFILTER=m +CONFIG_NETFILTER_NETLINK_OSF=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_TABLES=y +CONFIG_NF_TABLES_INET=y +CONFIG_NF_TABLES_NETDEV=y +CONFIG_NFT_CT=m +CONFIG_NFT_MASQ=m +CONFIG_NFT_NAT=m +CONFIG_NFT_COMPAT=m +CONFIG_NFT_DUP_NETDEV=m +CONFIG_NFT_FWD_NETDEV=m +CONFIG_NF_FLOW_TABLE=m +CONFIG_NETFILTER_XT_MARK=m +CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m +CONFIG_NETFILTER_XT_TARGET_LOG=m +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_IPVS=m +CONFIG_IP_VS=m +CONFIG_NF_SOCKET_IPV4=m +CONFIG_NF_TPROXY_IPV4=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_NAT=m +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_MANGLE=m +CONFIG_NF_SOCKET_IPV6=m +CONFIG_NF_TPROXY_IPV6=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_NAT=m +CONFIG_IP6_NF_TARGET_MASQUERADE=m +CONFIG_NF_TABLES_BRIDGE=m +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BRIDGE=y +CONFIG_BRIDGE_VLAN_FILTERING=y +CONFIG_NET_DSA=m +CONFIG_VLAN_8021Q_GVRP=y +CONFIG_VLAN_8021Q_MVRP=y +CONFIG_LLC2=y +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_MULTIQ=y +CONFIG_NET_SCH_CBS=y +CONFIG_NET_SCH_ETF=y +CONFIG_NET_SCH_TAPRIO=y +CONFIG_NET_SCH_MQPRIO=y +CONFIG_NET_SCH_INGRESS=y +CONFIG_NET_CLS_BASIC=y +CONFIG_NET_CLS_U32=y +CONFIG_NET_CLS_FLOWER=y +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=y +CONFIG_NET_ACT_GACT=m +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_SKBEDIT=y +CONFIG_NET_ACT_GATE=y +CONFIG_TSN=y +CONFIG_QRTR=m +CONFIG_QRTR_SMD=m +CONFIG_QRTR_TUN=m +CONFIG_NET_PKTGEN=m +CONFIG_CAN=m +CONFIG_BT=y +CONFIG_BT_RFCOMM=y +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=y +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=y +CONFIG_BT_LEDS=y +# CONFIG_BT_DEBUGFS is not set +CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIUART=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIUART_ATH3K=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIUART_3WIRE=y +CONFIG_BT_HCIUART_BCM=y +CONFIG_BT_HCIUART_QCA=y +CONFIG_BT_HCIVHCI=y +CONFIG_BT_NXPUART=m +CONFIG_CFG80211=y +CONFIG_NL80211_TESTMODE=y +CONFIG_CFG80211_WEXT=y +CONFIG_MAC80211=y +CONFIG_MAC80211_LEDS=y +CONFIG_NET_9P=y +CONFIG_NET_9P_VIRTIO=y +CONFIG_NFC=m +CONFIG_NFC_NCI=m +CONFIG_NFC_S3FWRN5_I2C=m +CONFIG_PCI=y +CONFIG_PCIEPORTBUS=y +CONFIG_PCI_IOV=y +CONFIG_PCI_PASID=y +CONFIG_HOTPLUG_PCI=y +CONFIG_HOTPLUG_PCI_ACPI=y +CONFIG_PCIE_ALTERA=y +CONFIG_PCIE_ALTERA_MSI=y +CONFIG_PCI_HOST_THUNDER_PEM=y +CONFIG_PCI_HOST_THUNDER_ECAM=y +CONFIG_PCI_HOST_GENERIC=y +CONFIG_PCI_XGENE=y +CONFIG_PCI_MESON=m +CONFIG_PCI_IMX6_HOST=y +CONFIG_PCI_IMX6_EP=y +CONFIG_PCI_LAYERSCAPE=y +CONFIG_PCI_HISI=y +CONFIG_PCIE_KIRIN=y +CONFIG_PCIE_LAYERSCAPE_GEN4=y +CONFIG_PCI_ENDPOINT=y +CONFIG_PCI_ENDPOINT_CONFIGFS=y +CONFIG_PCI_EPF_TEST=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_FW_LOADER_USER_HELPER=y +CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y +CONFIG_BRCMSTB_GISB_ARB=y +CONFIG_VEXPRESS_CONFIG=y +CONFIG_FSL_MC_UAPI_SUPPORT=y +CONFIG_ARM_SCMI_PROTOCOL=y +CONFIG_ARM_SCMI_POWER_CONTROL=y +CONFIG_IMX_SCMI_BBM_CONTROL=y +CONFIG_IMX_SCMI_MISC_CONTROL=y +CONFIG_ARM_SCPI_PROTOCOL=y +CONFIG_EFI_CAPSULE_LOADER=y +CONFIG_IMX_DSP=y +CONFIG_IMX_SCU=y +CONFIG_IMX_SCU_PD=y +CONFIG_IMX_SEC_ENCLAVE=y +CONFIG_GNSS=m +CONFIG_GNSS_MTK_SERIAL=m +CONFIG_MTD=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_INTELEXT=y +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_CFI_STAA=y +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_OF=y +CONFIG_MTD_DATAFLASH=y +CONFIG_MTD_SST25L=y +CONFIG_MTD_RAW_NAND=y +CONFIG_MTD_NAND_DENALI_DT=y +CONFIG_MTD_NAND_GPMI_NAND=y +CONFIG_MTD_NAND_FSL_IFC=y +CONFIG_MTD_SPI_NOR=y +# CONFIG_MTD_SPI_NOR_USE_4K_SECTORS is not set +CONFIG_MTD_UBI=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_NBD=m +CONFIG_XEN_BLKDEV_BACKEND=m +CONFIG_VIRTIO_BLK=y +CONFIG_BLK_DEV_NVME=y +CONFIG_SRAM=y +CONFIG_PCI_ENDPOINT_TEST=y +CONFIG_EEPROM_AT24=m +CONFIG_EEPROM_AT25=m +CONFIG_UACCE=m +# CONFIG_SCSI_PROC_FS is not set +CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_SAS_ATA=y +CONFIG_SCSI_HISI_SAS=y +CONFIG_SCSI_HISI_SAS_PCI=y +CONFIG_MEGARAID_SAS=y +CONFIG_SCSI_MPT3SAS=m +CONFIG_ATA=y +CONFIG_SATA_AHCI=y +CONFIG_SATA_AHCI_PLATFORM=y +CONFIG_AHCI_IMX=y +CONFIG_AHCI_CEVA=y +CONFIG_AHCI_QORIQ=y +CONFIG_SATA_SIL24=y +CONFIG_PATA_OF_PLATFORM=y +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_BLK_DEV_DM=m +CONFIG_DM_CRYPT=m +CONFIG_DM_MIRROR=m +CONFIG_DM_ZERO=m +CONFIG_NETDEVICES=y +CONFIG_MACVLAN=m +CONFIG_MACVTAP=m +CONFIG_TUN=y +CONFIG_VETH=m +CONFIG_VIRTIO_NET=y +CONFIG_NET_DSA_MSCC_FELIX=m +CONFIG_NET_DSA_SJA1105=m +CONFIG_NET_DSA_SJA1105_PTP=y +CONFIG_NET_DSA_SJA1105_TAS=y +CONFIG_NET_DSA_SJA1105_VL=y +CONFIG_AMD_XGBE=y +CONFIG_ATL1C=m +CONFIG_BCMGENET=m +CONFIG_BNX2X=m +CONFIG_SYSTEMPORT=m +CONFIG_MACB=y +CONFIG_THUNDER_NIC_PF=y +CONFIG_FEC=y +CONFIG_FEC_UIO=y +CONFIG_FSL_FMAN=y +CONFIG_FSL_DPAA_ETH=y +CONFIG_FSL_DPAA2_ETH=y +CONFIG_FSL_DPAA2_MAC=y +CONFIG_FSL_DPAA2_SWITCH=y +CONFIG_FSL_ENETC=y +CONFIG_FSL_ENETC4=y +CONFIG_FSL_ENETC_VF=y +CONFIG_FSL_NETC_PRB_IERB=y +CONFIG_FSL_ENETC_QOS=y +CONFIG_FSL_NTMP=y +CONFIG_HIX5HD2_GMAC=y +CONFIG_HNS_DSAF=y +CONFIG_HNS_ENET=y +CONFIG_HNS3=y +CONFIG_HNS3_HCLGE=y +CONFIG_HNS3_ENET=y +CONFIG_E1000=y +CONFIG_E1000E=y +CONFIG_IGB=y +CONFIG_IGBVF=y +CONFIG_MVMDIO=y +CONFIG_SKY2=y +CONFIG_MLX4_EN=m +CONFIG_MLX5_CORE=m +CONFIG_MLX5_CORE_EN=y +CONFIG_MSCC_OCELOT_SWITCH=y +CONFIG_QCOM_EMAC=m +CONFIG_RMNET=m +CONFIG_SMC91X=y +CONFIG_SMSC911X=y +CONFIG_STMMAC_ETH=y +CONFIG_DWMAC_GENERIC=m +CONFIG_AQUANTIA_PHY=y +CONFIG_BROADCOM_PHY=m +CONFIG_BCM54140_PHY=m +CONFIG_MARVELL_PHY=m +CONFIG_MARVELL_10G_PHY=m +CONFIG_MICREL_PHY=y +CONFIG_MICROSEMI_PHY=y +CONFIG_NXP_C45_TJA11XX_PHY=y +CONFIG_NXP_TJA11XX_PHY=y +CONFIG_AT803X_PHY=y +CONFIG_REALTEK_PHY=y +CONFIG_ROCKCHIP_PHY=y +CONFIG_VITESSE_PHY=y +CONFIG_CAN_FLEXCAN=m +CONFIG_MDIO_BITBANG=y +CONFIG_MDIO_BUS_MUX_MULTIPLEXER=y +CONFIG_MDIO_BUS_MUX_MMIOREG=y +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_RTL8152=y +CONFIG_USB_LAN78XX=m +CONFIG_USB_USBNET=y +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_AX88179_178A=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_CDC_NCM=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_SR9800=m +CONFIG_USB_NET_SMSC75XX=m +CONFIG_USB_NET_SMSC95XX=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_NET_ZAURUS=m +CONFIG_HOSTAP=y +CONFIG_WL18XX=m +CONFIG_WLCORE_SDIO=m +CONFIG_XEN_NETDEV_BACKEND=m +CONFIG_IVSHMEM_NET=y +CONFIG_INPUT_JOYDEV=y +CONFIG_INPUT_EVDEV=y +CONFIG_KEYBOARD_ADC=m +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_RPMSG=y +CONFIG_KEYBOARD_SNVS_PWRKEY=y +CONFIG_KEYBOARD_IMX_SC_KEY=y +CONFIG_KEYBOARD_CROS_EC=y +CONFIG_INPUT_JOYSTICK=y +CONFIG_JOYSTICK_WIICHUCK=y +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ATMEL_MXT=m +CONFIG_TOUCHSCREEN_EXC3000=m +CONFIG_TOUCHSCREEN_GOODIX=m +CONFIG_TOUCHSCREEN_EDT_FT5X06=m +CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_I2C=m +CONFIG_INPUT_MISC=y +CONFIG_INPUT_BBNSM_PWRKEY=y +CONFIG_INPUT_PWM_BEEPER=m +CONFIG_INPUT_PWM_VIBRA=m +# CONFIG_SERIO_SERPORT is not set +CONFIG_SERIO_AMBAKMI=y +CONFIG_LEGACY_PTY_COUNT=16 +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_DW=y +CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_SERIAL_IMX=y +CONFIG_SERIAL_IMX_CONSOLE=y +CONFIG_SERIAL_XILINX_PS_UART=y +CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y +CONFIG_SERIAL_FSL_LPUART=y +CONFIG_SERIAL_FSL_LPUART_CONSOLE=y +CONFIG_SERIAL_FSL_LINFLEXUART=y +CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y +CONFIG_RPMSG_TTY=m +CONFIG_SERIAL_DEV_BUS=y +CONFIG_VIRTIO_CONSOLE=y +CONFIG_IPMI_HANDLER=m +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_SI=m +CONFIG_TCG_TPM=y +CONFIG_TCG_TIS_I2C_INFINEON=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_MUX=y +CONFIG_I2C_MUX_GPIO=y +CONFIG_I2C_MUX_PCA954x=y +CONFIG_I2C_DESIGNWARE_PLATFORM=y +CONFIG_I2C_GPIO=m +CONFIG_I2C_IMX=y +CONFIG_I2C_IMX_LPI2C=y +CONFIG_I2C_RK3X=y +CONFIG_I2C_RPBUS=y +CONFIG_I2C_CROS_EC_TUNNEL=y +CONFIG_I2C_SLAVE_EEPROM=y +CONFIG_I3C=y +CONFIG_SVC_I3C_MASTER=y +CONFIG_SPI=y +CONFIG_SPI_CADENCE_QUADSPI=y +CONFIG_SPI_DESIGNWARE=m +CONFIG_SPI_DW_DMA=y +CONFIG_SPI_DW_MMIO=m +CONFIG_SPI_FSL_LPSPI=y +CONFIG_SPI_FSL_QUADSPI=y +CONFIG_SPI_NXP_FLEXSPI=y +CONFIG_SPI_IMX=y +CONFIG_SPI_FSL_DSPI=y +CONFIG_SPI_PL022=y +CONFIG_SPI_SPIDEV=y +CONFIG_SPI_SLAVE=y +CONFIG_SPI_SLAVE_TIME=y +CONFIG_SPI_SLAVE_SYSTEM_CONTROL=y +CONFIG_SPMI=y +CONFIG_PPS_CLIENT_GPIO=y +CONFIG_PINCTRL_MAX77620=y +CONFIG_PINCTRL_SCMI=y +CONFIG_PINCTRL_SINGLE=y +CONFIG_PINCTRL_IMX8MM=y +CONFIG_PINCTRL_IMX8MN=y +CONFIG_PINCTRL_IMX8MP=y +CONFIG_PINCTRL_IMX8MQ=y +CONFIG_PINCTRL_IMX8QM=y +CONFIG_PINCTRL_IMX8QXP=y +CONFIG_PINCTRL_IMX8DXL=y +CONFIG_PINCTRL_IMX8ULP=y +CONFIG_PINCTRL_IMX93=y +CONFIG_PINCTRL_S32V234=y +CONFIG_GPIO_ALTERA=m +CONFIG_GPIO_DWAPB=y +CONFIG_GPIO_IMX_RPMSG=y +CONFIG_GPIO_MB86S7X=y +CONFIG_GPIO_MPC8XXX=y +CONFIG_GPIO_MXC=y +CONFIG_GPIO_PL061=y +CONFIG_GPIO_VF610=y +CONFIG_GPIO_WCD934X=m +CONFIG_GPIO_XGENE=y +CONFIG_GPIO_MAX732X=y +CONFIG_GPIO_PCA953X=y +CONFIG_GPIO_PCA953X_IRQ=y +CONFIG_GPIO_ADP5585=y +CONFIG_GPIO_BD9571MWV=m +CONFIG_GPIO_MAX77620=y +CONFIG_GPIO_SL28CPLD=m +CONFIG_POWER_RESET_BRCMSTB=y +CONFIG_POWER_RESET_XGENE=y +CONFIG_POWER_RESET_SYSCON=y +CONFIG_SYSCON_REBOOT_MODE=y +CONFIG_BATTERY_SBS=m +CONFIG_BATTERY_BQ27XXX=y +CONFIG_BATTERY_MAX17042=m +CONFIG_CHARGER_BQ25890=m +CONFIG_CHARGER_BQ25980=m +CONFIG_SENSORS_ARM_SCMI=y +CONFIG_SENSORS_ARM_SCPI=y +CONFIG_SENSORS_FP9931=y +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_PWM_FAN=m +CONFIG_SENSORS_SL28CPLD=m +CONFIG_SENSORS_INA2XX=m +CONFIG_SENSORS_INA3221=m +CONFIG_THERMAL_WRITABLE_TRIPS=y +CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y +CONFIG_CPU_THERMAL=y +CONFIG_THERMAL_EMULATION=y +CONFIG_IMX_SC_THERMAL=y +CONFIG_IMX8MM_THERMAL=y +CONFIG_QORIQ_THERMAL=y +CONFIG_WATCHDOG=y +CONFIG_SL28CPLD_WATCHDOG=m +CONFIG_ARM_SP805_WATCHDOG=y +CONFIG_ARM_SBSA_WATCHDOG=y +CONFIG_DW_WATCHDOG=y +CONFIG_IMX2_WDT=y +CONFIG_IMX_SC_WDT=y +CONFIG_IMX7ULP_WDT=y +CONFIG_ARM_SMC_WATCHDOG=y +CONFIG_XEN_WDT=y +CONFIG_MFD_ADP5585=y +CONFIG_MFD_BD9571MWV=y +CONFIG_MFD_AXP20X_I2C=y +CONFIG_MFD_IMX_FLEXIO=y +CONFIG_MFD_HI6421_PMIC=y +CONFIG_MFD_FP9931=y +CONFIG_MFD_MAX77620=y +CONFIG_MFD_MAX96752=y +CONFIG_MFD_MAX96752_I2C=y +CONFIG_MFD_MAX96789=y +CONFIG_MFD_MAX96789_I2C=y +CONFIG_MFD_MT6397=y +CONFIG_MFD_SEC_CORE=y +CONFIG_MFD_SL28CPLD=y +CONFIG_MFD_ROHM_BD718XX=y +CONFIG_MFD_WCD934X=m +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_AXP20X=y +CONFIG_REGULATOR_BD718XX=y +CONFIG_REGULATOR_BD9571MWV=y +CONFIG_REGULATOR_FAN53555=y +CONFIG_REGULATOR_GPIO=y +CONFIG_REGULATOR_HI6421V530=y +CONFIG_REGULATOR_MAX77620=y +CONFIG_REGULATOR_MAX8973=y +CONFIG_REGULATOR_FP9931=y +CONFIG_REGULATOR_MP8859=y +CONFIG_REGULATOR_MT6358=y +CONFIG_REGULATOR_MT6397=y +CONFIG_REGULATOR_PCA9450=y +CONFIG_REGULATOR_PF0900=y +CONFIG_REGULATOR_PF8X00=y +CONFIG_REGULATOR_PFUZE100=y +CONFIG_REGULATOR_PWM=y +CONFIG_REGULATOR_QCOM_SPMI=y +CONFIG_REGULATOR_S2MPS11=y +CONFIG_REGULATOR_TPS65132=m +CONFIG_REGULATOR_VCTRL=m +CONFIG_RC_CORE=m +CONFIG_RC_DECODERS=y +CONFIG_IR_IMON_DECODER=m +CONFIG_IR_JVC_DECODER=m +CONFIG_IR_MCE_KBD_DECODER=m +CONFIG_IR_NEC_DECODER=m +CONFIG_IR_RC5_DECODER=m +CONFIG_IR_RC6_DECODER=m +CONFIG_IR_RCMM_DECODER=m +CONFIG_IR_SANYO_DECODER=m +CONFIG_IR_SHARP_DECODER=m +CONFIG_IR_SONY_DECODER=m +CONFIG_IR_XMP_DECODER=m +CONFIG_RC_DEVICES=y +CONFIG_IR_GPIO_CIR=m +CONFIG_MEDIA_SUPPORT=y +CONFIG_MEDIA_CAMERA_SUPPORT=y +CONFIG_MEDIA_ANALOG_TV_SUPPORT=y +CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y +CONFIG_MEDIA_SDR_SUPPORT=y +CONFIG_MEDIA_PLATFORM_SUPPORT=y +# CONFIG_DVB_NET is not set +CONFIG_MEDIA_USB_SUPPORT=y +CONFIG_USB_VIDEO_CLASS=m +CONFIG_V4L_PLATFORM_DRIVERS=y +CONFIG_SDR_PLATFORM_DRIVERS=y +CONFIG_V4L_MEM2MEM_DRIVERS=y +CONFIG_VIDEO_MX8_CAPTURE=y +CONFIG_VIDEO_MXC_CAPTURE=y +CONFIG_VIDEO_MXC_CSI_CAMERA=y +CONFIG_MXC_MIPI_CSI=y +CONFIG_MXC_CAMERA_OV5640_MIPI_V2=y +CONFIG_VIDEO_AMPHION_VPU=y +CONFIG_VIDEO_DWC_MIPI_CSIS=y +CONFIG_VIDEO_IMX8_ISI=y +CONFIG_VIDEO_IMX8_JPEG=m +CONFIG_VIDEO_NXP_NEOISP=m +CONFIG_VIDEO_HANTRO=m +CONFIG_VIDEO_IMX219=m +CONFIG_VIDEO_OV5640=y +CONFIG_VIDEO_OV5645=m +CONFIG_VIDEO_AP1302=y +CONFIG_VIDEO_AP130X=m +CONFIG_VIDEO_MT9M114=y +CONFIG_VIDEO_OS08A20=m +CONFIG_IMX_DPU_CORE=y +CONFIG_IMX8MM_LCDIF_CORE=y +CONFIG_IMX_LCDIFV3_CORE=y +CONFIG_DRM=y +CONFIG_DRM_I2C_NXP_TDA998X=m +CONFIG_DRM_MALI_DISPLAY=m +CONFIG_DRM_NOUVEAU=m +CONFIG_DRM_PANEL_BOE_TV101WUM_NL6=m +CONFIG_DRM_PANEL_LVDS=m +CONFIG_DRM_PANEL_SIMPLE=y +CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m +CONFIG_DRM_PANEL_RAYDIUM_RM67191=y +CONFIG_DRM_PANEL_RAYDIUM_RM68200=y +CONFIG_DRM_PANEL_RAYDIUM_RM692C9=y +CONFIG_DRM_PANEL_ROCKTECK_HIMAX8394F=y +CONFIG_DRM_PANEL_SEIKO_43WVF1G=y +CONFIG_DRM_PANEL_SITRONIX_ST7703=m +CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m +CONFIG_DRM_PANEL_WKS_101WX001=y +CONFIG_DRM_DISPLAY_CONNECTOR=y +CONFIG_DRM_LONTIUM_LT8912B=m +CONFIG_DRM_LONTIUM_LT9611=m +CONFIG_DRM_LONTIUM_LT9611UXC=m +CONFIG_DRM_FSL_IMX_LVDS_BRIDGE=y +CONFIG_DRM_MAX96752_LVDS=y +CONFIG_DRM_MAX96789_DSI=y +CONFIG_DRM_NWL_MIPI_DSI=y +CONFIG_DRM_NXP_SEIKO_43WVFIG=y +CONFIG_DRM_PARADE_PS8640=m +CONFIG_DRM_SII902X=m +CONFIG_DRM_SIMPLE_BRIDGE=m +CONFIG_DRM_THINE_THC63LVD1024=m +CONFIG_DRM_TI_SN65DSI86=m +CONFIG_DRM_I2C_ADV7511=y +CONFIG_DRM_I2C_ADV7511_AUDIO=y +CONFIG_DRM_IMX95_LDB=y +CONFIG_DRM_IMX95_MIPI_DSI=y +CONFIG_DRM_IMX95_PIXEL_INTERLEAVER=y +CONFIG_DRM_IMX95_PIXEL_LINK=y +CONFIG_DRM_DW_HDMI_AHB_AUDIO=m +CONFIG_DRM_DW_HDMI_I2S_AUDIO=m +CONFIG_DRM_DW_HDMI_GP_AUDIO=y +CONFIG_DRM_DW_HDMI_CEC=m +CONFIG_DRM_ITE_IT6263=y +CONFIG_DRM_ITE_IT6161=y +CONFIG_DRM_IMX=y +CONFIG_DRM_IMX_LCDIF_MUX_DISPLAY=y +CONFIG_DRM_IMX_PARALLEL_DISPLAY=y +CONFIG_DRM_IMX_TVE=y +CONFIG_DRM_IMX_LDB=y +CONFIG_DRM_IMX8QM_LDB=y +CONFIG_DRM_IMX8QXP_LDB=y +CONFIG_DRM_IMX8MP_LDB=y +CONFIG_DRM_IMX93_LDB=y +CONFIG_DRM_IMX_DW_MIPI_DSI=y +CONFIG_DRM_IMX93_PARALLEL_DISPLAY_FORMAT=y +CONFIG_DRM_IMX_HDMI=y +CONFIG_DRM_IMX_SEC_DSIM=y +CONFIG_DRM_IMX_DCNANO=y +CONFIG_DRM_IMX95_DPU=y +CONFIG_DRM_IMX_DCSS=y +CONFIG_DRM_IMX_CDNS_MHDP=y +CONFIG_DRM_ETNAVIV=m +CONFIG_DRM_HISI_HIBMC=m +CONFIG_DRM_HISI_KIRIN=m +CONFIG_DRM_MXSFB=y +CONFIG_DRM_PL111=m +CONFIG_DRM_LIMA=m +CONFIG_DRM_PANFROST=m +CONFIG_FB=y +CONFIG_FB_ARMCLCD=y +CONFIG_FB_EFI=y +CONFIG_FB_MXC_EINK_V2_PANEL=y +CONFIG_BACKLIGHT_PWM=y +CONFIG_BACKLIGHT_LP855X=m +CONFIG_BACKLIGHT_GPIO=y +CONFIG_BACKLIGHT_LED=y +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_ALOOP=m +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_SOC=y +CONFIG_SND_SOC_FSL_ASRC=m +CONFIG_SND_SOC_FSL_MQS=m +CONFIG_SND_SOC_FSL_MICFIL=m +CONFIG_SND_SOC_FSL_EASRC=m +CONFIG_SND_SOC_FSL_XCVR=m +CONFIG_SND_SOC_FSL_RPMSG=m +CONFIG_SND_IMX_SOC=m +CONFIG_SND_SOC_IMX_SGTL5000=m +CONFIG_SND_SOC_IMX_SPDIF=m +CONFIG_SND_SOC_FSL_ASOC_CARD=m +CONFIG_SND_SOC_IMX_AUDMIX=m +CONFIG_SND_SOC_IMX_HDMI=m +CONFIG_SND_SOC_IMX_CARD=m +CONFIG_SND_SOC_IMX_PCM512X=m +CONFIG_SND_SOC_SOF_TOPLEVEL=y +CONFIG_SND_SOC_SOF_OF=m +CONFIG_SND_SOC_SOF_IMX_TOPLEVEL=y +CONFIG_SND_SOC_SOF_IMX8=m +CONFIG_SND_SOC_SOF_IMX8M=m +CONFIG_SND_SOC_SOF_IMX8ULP=m +CONFIG_SND_SOC_AK4613=m +CONFIG_SND_SOC_BT_SCO=y +CONFIG_SND_SOC_CROS_EC_CODEC=m +CONFIG_SND_SOC_CS42XX8_I2C=y +CONFIG_SND_SOC_DMIC=m +CONFIG_SND_SOC_ES7134=m +CONFIG_SND_SOC_ES7241=m +CONFIG_SND_SOC_GTM601=m +CONFIG_SND_SOC_MAX98357A=m +CONFIG_SND_SOC_MAX98927=m +CONFIG_SND_SOC_MSM8916_WCD_ANALOG=m +CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m +CONFIG_SND_SOC_PCM3168A_I2C=m +CONFIG_SND_SOC_RT5659=m +CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m +CONFIG_SND_SOC_SIMPLE_MUX=m +CONFIG_SND_SOC_SPDIF=m +CONFIG_SND_SOC_TAS571X=m +CONFIG_SND_SOC_WCD934X=m +CONFIG_SND_SOC_WM8524=y +CONFIG_SND_SOC_WM8904=m +CONFIG_SND_SOC_WM8960=m +CONFIG_SND_SOC_WM8962=m +CONFIG_SND_SOC_WSA881X=m +CONFIG_SND_SOC_RPMSG_WM8960=m +CONFIG_SND_SOC_RPMSG_AK4497=m +CONFIG_SND_SOC_LPASS_WSA_MACRO=m +CONFIG_SND_SOC_LPASS_VA_MACRO=m +CONFIG_SND_SIMPLE_CARD=y +CONFIG_SND_AUDIO_GRAPH_CARD=y +CONFIG_HID_MULTITOUCH=m +CONFIG_I2C_HID_ACPI=m +CONFIG_I2C_HID_OF=m +CONFIG_USB_CONN_GPIO=y +CONFIG_USB=y +CONFIG_USB_OTG=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PCI_RENESAS=m +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_HCD_PLATFORM=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_HCD_TEST_MODE=y +CONFIG_USB_ACM=m +CONFIG_USB_STORAGE=y +CONFIG_USB_UAS=y +CONFIG_USB_CDNS_SUPPORT=y +CONFIG_USB_CDNS3=y +CONFIG_USB_CDNS3_GADGET=y +CONFIG_USB_CDNS3_HOST=y +CONFIG_USB_MUSB_HDRC=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC2=y +CONFIG_USB_CHIPIDEA=y +CONFIG_USB_CHIPIDEA_UDC=y +CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_ISP1760=y +CONFIG_USB_SERIAL=y +CONFIG_USB_SERIAL_CONSOLE=y +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_SIMPLE=y +CONFIG_USB_SERIAL_CP210X=m +CONFIG_USB_SERIAL_FTDI_SIO=y +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_TEST=m +CONFIG_USB_EHSET_TEST_FIXTURE=y +CONFIG_USB_HSIC_USB3503=y +CONFIG_NOP_USB_XCEIV=y +CONFIG_USB_MXS_PHY=y +CONFIG_USB_ULPI=y +CONFIG_USB_GADGET=y +CONFIG_USB_SNP_UDC_PLAT=y +CONFIG_USB_BDC_UDC=y +CONFIG_USB_CONFIGFS=y +CONFIG_USB_CONFIGFS_SERIAL=y +CONFIG_USB_CONFIGFS_ACM=y +CONFIG_USB_CONFIGFS_OBEX=y +CONFIG_USB_CONFIGFS_NCM=y +CONFIG_USB_CONFIGFS_ECM=y +CONFIG_USB_CONFIGFS_ECM_SUBSET=y +CONFIG_USB_CONFIGFS_RNDIS=y +CONFIG_USB_CONFIGFS_EEM=y +CONFIG_USB_CONFIGFS_MASS_STORAGE=y +CONFIG_USB_CONFIGFS_F_LB_SS=y +CONFIG_USB_CONFIGFS_F_FS=y +CONFIG_USB_CONFIGFS_F_UAC1=y +CONFIG_USB_CONFIGFS_F_UAC1_LEGACY=y +CONFIG_USB_CONFIGFS_F_UAC2=y +CONFIG_USB_CONFIGFS_F_MIDI=y +CONFIG_USB_CONFIGFS_F_HID=y +CONFIG_USB_CONFIGFS_F_UVC=y +CONFIG_USB_ZERO=m +CONFIG_USB_AUDIO=m +CONFIG_USB_ETH=m +CONFIG_USB_MASS_STORAGE=m +CONFIG_USB_G_SERIAL=m +CONFIG_TYPEC=y +CONFIG_TYPEC_TCPM=y +CONFIG_TYPEC_TCPCI=y +CONFIG_TYPEC_FUSB302=m +CONFIG_TYPEC_TPS6598X=m +CONFIG_TYPEC_HD3SS3220=m +CONFIG_TYPEC_SWITCH_GPIO=y +CONFIG_MMC=y +CONFIG_MMC_BLOCK_MINORS=32 +CONFIG_MMC_ARMMMCI=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_ACPI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_OF_ARASAN=y +CONFIG_MMC_SDHCI_OF_ESDHC=y +CONFIG_MMC_SDHCI_CADENCE=y +CONFIG_MMC_SDHCI_ESDHC_IMX=y +CONFIG_MMC_SDHCI_F_SDH30=y +CONFIG_MMC_SPI=y +CONFIG_MMC_DW=y +CONFIG_MMC_DW_EXYNOS=y +CONFIG_MMC_DW_HI3798CV200=y +CONFIG_MMC_DW_K3=y +CONFIG_MMC_MTK=y +CONFIG_MMC_SDHCI_XENON=y +CONFIG_SCSI_UFSHCD=y +CONFIG_SCSI_UFSHCD_PLATFORM=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_CLASS_MULTICOLOR=m +CONFIG_LEDS_LM3692X=m +CONFIG_LEDS_PCA9532=m +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_PCA963X=y +CONFIG_LEDS_PCA995X=m +CONFIG_LEDS_PWM=y +CONFIG_LEDS_SYSCON=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_DISK=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y +CONFIG_LEDS_TRIGGER_PANIC=y +CONFIG_EDAC=y +CONFIG_EDAC_GHES=y +CONFIG_EDAC_LAYERSCAPE=m +CONFIG_EDAC_SYNOPSYS=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_HYM8563=m +CONFIG_RTC_DRV_MAX77686=y +CONFIG_RTC_DRV_PCF85363=m +CONFIG_RTC_DRV_M41T80=m +CONFIG_RTC_DRV_RX8581=m +CONFIG_RTC_DRV_RV3028=m +CONFIG_RTC_DRV_RV8803=m +CONFIG_RTC_DRV_S5M=y +CONFIG_RTC_DRV_DS3232=y +CONFIG_RTC_DRV_PCF2127=m +CONFIG_RTC_DRV_PCF2131=m +CONFIG_RTC_DRV_EFI=y +CONFIG_RTC_DRV_CROS_EC=y +CONFIG_RTC_DRV_FSL_FTM_ALARM=m +CONFIG_RTC_DRV_PL031=y +CONFIG_RTC_DRV_SNVS=y +CONFIG_RTC_DRV_BBNSM=y +CONFIG_RTC_DRV_IMX_SC=y +CONFIG_RTC_DRV_IMX_SM=y +CONFIG_RTC_DRV_IMX_RPMSG=y +CONFIG_DMADEVICES=y +CONFIG_BCM_SBA_RAID=m +CONFIG_FSL_EDMA=y +CONFIG_FSL_QDMA=m +CONFIG_FSL_EDMA_V3=y +CONFIG_IMX_SDMA=y +CONFIG_MV_XOR_V2=y +CONFIG_MXS_DMA=y +CONFIG_MXC_PXP_V3=y +CONFIG_PL330_DMA=y +CONFIG_QCOM_HIDMA_MGMT=y +CONFIG_QCOM_HIDMA=y +CONFIG_DW_EDMA=y +CONFIG_DW_EDMA_PCIE=y +CONFIG_FSL_DPAA2_QDMA=m +CONFIG_DMATEST=y +CONFIG_DMABUF_HEAPS=y +CONFIG_DMABUF_HEAPS_SYSTEM=y +CONFIG_DMABUF_HEAPS_CMA=y +CONFIG_DMABUF_HEAPS_DSP=y +CONFIG_UIO_PCI_GENERIC=y +CONFIG_UIO_IVSHMEM=y +CONFIG_VFIO=y +CONFIG_VFIO_PCI=y +CONFIG_VFIO_FSL_MC=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_BALLOON=y +CONFIG_VIRTIO_MMIO=y +CONFIG_VIRTIO_IVSHMEM=y +CONFIG_XEN_GNTDEV=y +CONFIG_XEN_GRANT_DEV_ALLOC=y +CONFIG_STAGING=y +CONFIG_STAGING_MEDIA=y +CONFIG_VIDEO_IMX_CAPTURE=y +CONFIG_IMX8_MEDIA_DEVICE=m +CONFIG_MHDP_HDMIRX=y +CONFIG_MHDP_HDMIRX_CEC=y +CONFIG_FSL_DPAA2=y +CONFIG_FSL_PPFE=y +CONFIG_FSL_PPFE_UTIL_DISABLED=y +CONFIG_ETHOSU=y +CONFIG_NEUTRON=y +CONFIG_CHROME_PLATFORMS=y +CONFIG_CROS_EC=y +CONFIG_CROS_EC_I2C=y +CONFIG_CROS_EC_SPI=y +CONFIG_CROS_EC_CHARDEV=m +CONFIG_CLK_VEXPRESS_OSC=y +CONFIG_COMMON_CLK_SCMI=y +CONFIG_COMMON_CLK_SCPI=y +CONFIG_COMMON_CLK_CS2000_CP=y +CONFIG_COMMON_CLK_FSL_SAI=y +CONFIG_COMMON_CLK_S2MPS11=y +CONFIG_COMMON_CLK_XGENE=y +CONFIG_COMMON_CLK_PWM=y +CONFIG_COMMON_CLK_VC5=y +CONFIG_CLK_IMX8MM=y +CONFIG_CLK_IMX8MN=y +CONFIG_CLK_IMX8MP=y +CONFIG_CLK_IMX8MQ=y +CONFIG_CLK_IMX8QXP=y +CONFIG_CLK_IMX8ULP=y +CONFIG_CLK_IMX93=y +CONFIG_CLK_IMX95_BLK_CTL=y +CONFIG_HWSPINLOCK=y +CONFIG_ARM_MHU=y +CONFIG_IMX_MBOX=y +CONFIG_PLATFORM_MHU=y +CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y +CONFIG_ARM_SMMU=y +CONFIG_ARM_SMMU_V3=y +CONFIG_REMOTEPROC=y +CONFIG_IMX_REMOTEPROC=y +CONFIG_IMX_DSP_REMOTEPROC=m +CONFIG_IMX_NEUTRON_REMOTEPROC=y +CONFIG_RPMSG_CHAR=m +CONFIG_RPMSG_CTRL=m +CONFIG_RPMSG_QCOM_GLINK_RPM=y +CONFIG_SOUNDWIRE=m +CONFIG_SOUNDWIRE_QCOM=m +CONFIG_SOC_BRCMSTB=y +CONFIG_FSL_DPAA=y +CONFIG_FSL_MC_DPIO=y +CONFIG_FSL_RCPM=y +CONFIG_FSL_QIXIS=y +CONFIG_SOC_TI=y +CONFIG_EXTCON_PTN5150=m +CONFIG_EXTCON_USB_GPIO=y +CONFIG_EXTCON_USBC_CROS_EC=y +CONFIG_IIO=y +CONFIG_FXLS8962AF_I2C=m +CONFIG_IIO_ST_ACCEL_3AXIS=m +CONFIG_IMX8QXP_ADC=y +CONFIG_IMX93_ADC=y +CONFIG_MAX9611=m +CONFIG_QCOM_SPMI_VADC=m +CONFIG_QCOM_SPMI_ADC5=m +CONFIG_IIO_CROS_EC_SENSORS_CORE=m +CONFIG_IIO_CROS_EC_SENSORS=m +CONFIG_FXAS21002C=y +CONFIG_IIO_ST_GYRO_3AXIS=m +CONFIG_FXOS8700_I2C=y +CONFIG_RPMSG_IIO_PEDOMETER=m +CONFIG_INV_MPU6050_I2C=m +CONFIG_IIO_ST_LSM6DSX=y +CONFIG_IIO_CROS_EC_LIGHT_PROX=m +CONFIG_SENSORS_ISL29018=y +CONFIG_VCNL4000=m +CONFIG_VCNL4035=m +CONFIG_IIO_ST_MAGN_3AXIS=m +CONFIG_IIO_CROS_EC_BARO=m +CONFIG_MPL3115=y +CONFIG_MS5611=m +CONFIG_MS5611_I2C=m +CONFIG_PWM=y +CONFIG_PWM_ADP5585=y +CONFIG_PWM_CROS_EC=m +CONFIG_PWM_FSL_FTM=m +CONFIG_PWM_IMX27=y +CONFIG_PWM_IMX_TPM=y +CONFIG_PWM_RPCHIP=y +CONFIG_PWM_SL28CPLD=m +CONFIG_SL28CPLD_INTC=y +CONFIG_RESET_IMX7=y +CONFIG_RESET_IMX8ULP_SIM=y +CONFIG_PHY_MIXEL_LVDS=y +CONFIG_PHY_MIXEL_LVDS_COMBO=y +CONFIG_PHY_CADENCE_SALVO=y +CONFIG_PHY_FSL_IMX8MP_LVDS=y +CONFIG_PHY_FSL_IMX9_DPHY_RX=y +CONFIG_PHY_FSL_IMX93_MIPI_DPHY=y +CONFIG_PHY_MIXEL_MIPI_DPHY=y +CONFIG_PHY_FSL_IMX8M_PCIE=y +CONFIG_PHY_FSL_IMX8Q_PCIE=y +CONFIG_PHY_SAMSUNG_HDMI_PHY=y +CONFIG_PHY_QCOM_USB_HS=y +CONFIG_PHY_SAMSUNG_USB2=y +CONFIG_ARM_CCI_PMU=m +CONFIG_ARM_CCN=m +CONFIG_ARM_CMN=m +CONFIG_ARM_SMMU_V3_PMU=m +CONFIG_ARM_DSU_PMU=m +CONFIG_FSL_IMX8_DDR_PMU=y +CONFIG_FSL_IMX9_DDR_PMU=y +CONFIG_ARM_SPE_PMU=m +CONFIG_ARM_DMC620_PMU=m +CONFIG_HISI_PMU=y +CONFIG_MALI_MIDGARD=y +CONFIG_MALI_CSF_SUPPORT=y +CONFIG_NVMEM_IMX_OCOTP=y +CONFIG_NVMEM_IMX_OCOTP_SCU=y +CONFIG_NVMEM_RMEM=m +CONFIG_FPGA=y +CONFIG_FPGA_BRIDGE=m +CONFIG_ALTERA_FREEZE_BRIDGE=m +CONFIG_FPGA_REGION=m +CONFIG_OF_FPGA_REGION=m +CONFIG_TEE=y +CONFIG_OPTEE=y +CONFIG_MUX_MMIO=y +CONFIG_SLIM_QCOM_CTRL=m +CONFIG_MXC_SIM=y +CONFIG_MXC_GPU_VIV=y +CONFIG_MXC_EMVSIM=y +CONFIG_MXC_VIDEO_WAVE6=y +CONFIG_EXT2_FS=y +CONFIG_EXT3_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_BTRFS_FS=m +CONFIG_BTRFS_FS_POSIX_ACL=y +CONFIG_FANOTIFY=y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y +CONFIG_QUOTA=y +CONFIG_AUTOFS_FS=y +CONFIG_FUSE_FS=m +CONFIG_CUSE=m +CONFIG_OVERLAY_FS=m +CONFIG_VFAT_FS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_HUGETLBFS=y +CONFIG_EFIVAR_FS=y +CONFIG_JFFS2_FS=y +CONFIG_UBIFS_FS=y +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_XZ=y +CONFIG_NFS_FS=y +CONFIG_NFS_V4=y +CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_2=y +CONFIG_ROOT_NFS=y +CONFIG_9P_FS=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y +CONFIG_TRUSTED_KEYS=m +# CONFIG_TRUSTED_KEYS_TPM is not set +# CONFIG_TRUSTED_KEYS_TEE is not set +CONFIG_SECURITY=y +CONFIG_CRYPTO_USER=y +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_ARIA=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_CFB=m +CONFIG_CRYPTO_CTS=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_OFB=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_CHACHA20POLY1305=m +CONFIG_CRYPTO_ECHAINIV=y +CONFIG_CRYPTO_TLS=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_STREEBOG=m +CONFIG_CRYPTO_VMAC=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_ANSI_CPRNG=y +CONFIG_CRYPTO_USER_API_HASH=m +CONFIG_CRYPTO_USER_API_SKCIPHER=m +CONFIG_CRYPTO_USER_API_RNG=m +CONFIG_CRYPTO_USER_API_AEAD=m +CONFIG_CRYPTO_CHACHA20_NEON=m +CONFIG_CRYPTO_GHASH_ARM64_CE=y +CONFIG_CRYPTO_SHA1_ARM64_CE=y +CONFIG_CRYPTO_SHA2_ARM64_CE=y +CONFIG_CRYPTO_SHA512_ARM64_CE=m +CONFIG_CRYPTO_SHA3_ARM64=m +CONFIG_CRYPTO_SM3_ARM64_CE=m +CONFIG_CRYPTO_POLYVAL_ARM64_CE=m +CONFIG_CRYPTO_AES_ARM64_CE_BLK=y +CONFIG_CRYPTO_AES_ARM64_BS=m +CONFIG_CRYPTO_AES_ARM64_CE_CCM=y +CONFIG_CRYPTO_CRCT10DIF_ARM64_CE=m +CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=m +CONFIG_CRYPTO_DEV_FSL_CAAM=m +CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=m +CONFIG_CRYPTO_DEV_FSL_DPAA2_CAAM=m +CONFIG_CRYPTO_DEV_CCREE=m +CONFIG_CRYPTO_DEV_HISI_SEC2=m +CONFIG_CRYPTO_DEV_HISI_ZIP=m +CONFIG_CRYPTO_DEV_HISI_HPRE=m +CONFIG_CRYPTO_DEV_HISI_TRNG=m +CONFIG_CRYPTO_DEV_AMLOGIC_GXL=m +CONFIG_INDIRECT_PIO=y +CONFIG_CRC_CCITT=m +CONFIG_CRC8=y +CONFIG_CMA_SIZE_MBYTES=32 +CONFIG_PRINTK_TIME=y +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y +CONFIG_DEBUG_INFO_REDUCED=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_FS=y +# CONFIG_SCHED_DEBUG is not set +# CONFIG_FTRACE is not set +CONFIG_SAMPLES=y +CONFIG_SAMPLE_RPMSG_CLIENT=m +CONFIG_CORESIGHT=y +CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y +CONFIG_CORESIGHT_CATU=m +CONFIG_CORESIGHT_SINK_TPIU=m +CONFIG_CORESIGHT_SINK_ETBV10=m +CONFIG_CORESIGHT_SOURCE_ETM4X=y +CONFIG_CORESIGHT_STM=m +CONFIG_CORESIGHT_CPU_DEBUG=m +CONFIG_CORESIGHT_CTI=m +CONFIG_MEMTEST=y diff --git a/lab-data/yocto-imx93-frdm/bootlin-lab-data/nunchuk/ninvaders/joystick-support.patch b/lab-data/yocto-imx93-frdm/bootlin-lab-data/nunchuk/ninvaders/joystick-support.patch new file mode 100644 index 0000000000..433930fd3b --- /dev/null +++ b/lab-data/yocto-imx93-frdm/bootlin-lab-data/nunchuk/ninvaders/joystick-support.patch @@ -0,0 +1,122 @@ +diff --git a/nInvaders.c b/nInvaders.c +index 793139c2e171..8ded1e292455 100644 +--- a/nInvaders.c ++++ b/nInvaders.c +@@ -22,9 +22,12 @@ + */ + + ++#include ++#include + #include + #include + #include ++#include + #include "nInvaders.h" + #include "player.h" + #include "aliens.h" +@@ -35,6 +38,7 @@ + int lives; + long score; + int status; // status handled in timer ++int resend; + + #define GAME_LOOP 1 + #define GAME_NEXTLEVEL 2 +@@ -127,6 +131,58 @@ void drawscore() + statusDisplay(level, score, lives); + } + ++int td() ++{ ++ static struct timespec t0; ++ struct timespec t1; ++ double dt; ++ ++ clock_gettime(CLOCK_MONOTONIC, &t1); ++ dt = t1.tv_nsec - t0.tv_nsec; ++ t0 = t1; ++ ++ return dt > 500000; ++} ++ ++int getjs() ++{ ++ static int fd = -1; ++ struct js_event js; ++ ++ if (fd == -1) { ++ fd = open("/dev/input/js0", O_RDONLY | O_NONBLOCK); ++ if (fd < 0) ++ return -1; ++ } ++ ++ read(fd, &js, sizeof(struct js_event)); ++ ++ switch (js.type & ~JS_EVENT_INIT) { ++ case JS_EVENT_AXIS: ++ if (js.number == 0 && js.value < 0) { ++ resend |= 1 << 0; ++ return KEY_LEFT; ++ } else if (js.number == 0 && js.value > 0) { ++ resend |= 1 << 1; ++ return KEY_RIGHT; ++ } else if (js.number == 0 && js.value == 0) { ++ resend &= ~0x3; ++ } ++ break; ++ case JS_EVENT_BUTTON: ++ if (js.number == 2 && js.value == 1) { ++ resend |= 1 << 2; ++ return ' '; ++ } else if (js.number == 2 && js.value == 0) { ++ resend &= ~0x4; ++ } else if (js.number == 5 && js.value == 1) { ++ return 'p'; ++ } ++ break; ++ } ++ ++ return EOF; ++} + + /** + * reads input from keyboard and do action +@@ -136,7 +192,9 @@ void readInput() + int ch; + static int lastmove; + +- ch = getch(); // get key pressed ++ ch = getch(); ++ if (ch == EOF) ++ ch = getjs(); + + switch (status) { + +@@ -273,6 +331,17 @@ void handleTimer() + if (player_shot_counter++ >= 1) {player_shot_counter=0;} // speed of player shot + if (aliens_move_counter++ >= weite) {aliens_move_counter=0;} // speed of aliend + if (ufo_move_counter++ >= 3) {ufo_move_counter=0;} // speed of ufo ++ ++ ++ if (td()) { ++ if (resend & (1 << 0)) ++ playerMoveLeft(); ++ else if (resend & (1 << 1)) ++ playerMoveRight(); ++ if (resend & (1 << 2)) ++ playerLaunchMissile(); ++ ++ } + + refreshScreen(); + break; +@@ -336,6 +405,8 @@ int main(int argc, char **argv) + + evaluateCommandLine(argc, argv); // evaluate command line parameters + graphicEngineInit(); // initialize graphic engine ++ ++ nodelay(stdscr, TRUE); + + // set up timer/ game handling + setUpTimer(); diff --git a/labs/yocto-advanced-configuration-imx93-frdm/yocto-advanced-configuration-imx93-frdm.tex b/labs/yocto-advanced-configuration-imx93-frdm/yocto-advanced-configuration-imx93-frdm.tex new file mode 100644 index 0000000000..fcfa2fd001 --- /dev/null +++ b/labs/yocto-advanced-configuration-imx93-frdm/yocto-advanced-configuration-imx93-frdm.tex @@ -0,0 +1,209 @@ +\subchapter{Lab2: Advanced Yocto configuration}{Configure the build, customize the + output images and use NFS} + +During this lab, you will: +\begin{itemize} + \item Customize the package selection + \item Configure the build system + \item Use the rootfs over NFS +\end{itemize} + +\section{Set up the Ethernet communication and NFS on the board} + +It isn't practical at all to reflash the root filesystem on the target +every time a change is made. Fortunately, it is possible to set up +networking between the development workstation and the target. Then, +workstation files can be accessed by the target through the network, +using NFS. + +First we need to set the kernel boot arguments U-Boot will pass to the +Linux kernel at boot time. For that, we will use the U-Boot shell +to set the \code{bootargs} variable. + +\begin{bashinput} +setenv bootargs 'console=ttyLP0,115200 root=/dev/nfs nfsroot=192.168.0.1:/nfs,nfsvers=3,tcp rw ip=192.168.0.100::192.168.0.1:255.255.255.0::eth0:off' + +setenv mmcargs bootargs + +saveenv +\end{bashinput} + +\section{Set up the Ethernet communication on the workstation} + +With a network cable, connect the Ethernet port of your board to the +one of your computer. If your computer already has a wired connection +to the network or does't have any Ethernet port, your instructor will +provide you an USB Ethernet adapter. A new network interface should + appear on your Linux system. + +Find the name of this interface by typing: +\begin{verbatim} +ip a +\end{verbatim} + +The network interface name is likely to be +\code{enxxx}\footnote{Following the {\em Predictable Network Interface +Names} convention: +\url{https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/}}. +If you have a pluggable Ethernet device, it's easy to identify as it's +the one that shows up after pluging in the device. + +Then, instead of configuring the host IP address from Network +Manager's graphical interface, let's do it through its command line +interface, which is so much easier to use: + +\begin{verbatim} +nmcli con add type ethernet ifname en... ip4 192.168.0.1/24 +\end{verbatim} + +\section{Set up the NFS server on the workstation} + +First install the NFS server on the training computer and create the root NFS +directory: +\begin{verbatim} +sudo apt install nfs-kernel-server +sudo mkdir -m 777 /nfs +\end{verbatim} + +Then make sure this directory is used and exported by the NFS server by adding +the below line to the \code{/etc/exports} file: + +\begin{verbatim} +/nfs *(rw,sync,no_root_squash,subtree_check) +\end{verbatim} + +Finally, make the NFS server use the new configuration: +\begin{verbatim} +sudo exportfs -r +\end{verbatim} + +\section{Add a package to the rootfs image} + +You can add packages to be built by editing the local configuration file +\code{$BUILDDIR/conf/local.conf}. The \yoctovar{IMAGE_INSTALL} variable controls the +packages included into the output image. + +To illustrate this, add the Dropbear SSH server to the list of enabled +packages. + +Tip: do not overwrite the default enabled package list, but append the Dropbear +package instead. + +\section{Add a new rootfs format} + +In the previous lab, we generated an SD card image containining our rootfs. +Since we will switch to NFS in the next step, a different rootfs format will be +needed. + +The \yoctovar{IMAGE_FSTYPES} lists the rootfs formats generated. Go +back to \code{$BUILDDIR/conf/local.conf} and add the \code{tar.gz} format. + +\section{Boot with the updated rootfs} + +First we need to put the rootfs under the NFS root directory so that it is +accessible by NFS clients. Simply uncompress the archived output image in the +previously created \code{/nfs} directory: +\begin{verbatim} +sudo tar xpf $BUILDDIR/tmp/deploy/images/imx93-11x11-lpddr4x-evk/\ + core-image-minimal-imx93-11x11-lpddr4x-evk.rootfs.tar.gz -C /nfs +\end{verbatim} + +Then boot the board. + +The Dropbear SSH server was enabled a few steps before, and should now be +running as a service on the imx93-frdm. You can test it by accessing the +board through SSH: +\begin{verbatim} +ssh root@192.168.0.100 +\end{verbatim} + +You should see the imx93-frdm command line! + +\section{Choose a package variant} + +Dependencies of a given package are explicitly defined in its recipe. +Some packages may need a specific library or piece of software but +others only depend on a functionality. As an example, the kernel +dependency is described by \code{virtual/kernel}. + +To see which kernel is used, dry-run BitBake: +\begin{verbatim} +bitbake -vn virtual/kernel +\end{verbatim} + +In our case, we can see the \code{linux-fslc-imx} provides the +\code{virtual/kernel} functionality. + +We can force Yocto to select another \code{kernel} by explicitly +defining which one to use in our local configuration. Try switching +from \code{linux-fslc-imx} to \code{linux-imx} only using the +local configuration. + +Then check the previous step worked by dry-running again BitBake. +\begin{verbatim} +bitbake -vn virtual/kernel +\end{verbatim} + +As this was only to show how to select a preferred provider for a given package, you can now use linux-imx again. +\section{BitBake tips} + +BitBake is a powerful tool which can be used to execute specific commands. Here +is a list of some useful ones, used with the \code{virtual/kernel} package. + +\begin{itemize} + \item The Yocto recipes are divided into numerous tasks, you can print them + by using: \code{bitbake -c listtasks virtual/kernel}. + \item BitBake allows to call a specific task only (and its dependencies) + with: \code{bitbake -c virtual/kernel}. (\code{} can be + \code{menuconfig} here). + \item You can force to rebuild a package by calling: \code{bitbake -f + virtual/kernel} + \item \code{world} is a special keyword for all packages. \code{bitbake + --runall=fetch world} will download all packages sources (and their + dependencies). + \item You can get a list of locally available packages and their current + version with: \\ + \code{bitbake -s} + \item You can also find detailed information on available packages, their + current version, dependencies or the contact information of the + maintainer by visiting: \\ + \url{https://layers.openembedded.org/layerindex/branch/master/recipes/} +\end{itemize} + +For detailed information, please run \code{bitbake -h} + +\section{Going further} + +If you have some time left, let's improve our setup to use TFTP, in +order to avoid having to reflash the SD card for every test. + +First, install a TFTP server (package \code{tftpd-hpa}) on your system. + +Then copy the Linux kernel image and Device Tree to the TFTP server home +directory (specified in \code{/etc/default/tftpd-hpa}) so that they are +made available by the TFTP server. + +Then, in the U-Boot shell, change the \code{bootcmd} variable to load the +kernel image and the Device Tree over TFTP (replace \code{dtb} by +the actual Device Tree file for your board): + +\small{ +\begin{verbatim} +setenv ipaddr 192.168.0.100 +setenv serverip 192.168.0.1 +setenv bootcmd 'tftp ${loadaddr} Image; tftp ${fdtaddr} dtb; booti ${loadaddr} - ${fdtaddr}' +\end{verbatim} +} + +Still in the U-Boot shell, set the \code{bootargs} specifying the kernel command line that +we previously set in \code{extlinux.conf}: + +{\small +\begin{verbatim} +setenv bootargs 'console=ttyLP0,115200 root=/dev/nfs \ + nfsroot=192.168.0.1:/nfs,nfsvers=3,tcp rw ip=192.168.0.100::192.168.0.1:255.255.255.0::eth0:off' +\end{verbatim} +} + +See the training materials of our {\em Embedded Linux system + development} course for details! diff --git a/labs/yocto-custom-machine/yocto-custom-machine.tex b/labs/yocto-custom-machine/yocto-custom-machine.tex index 4fe1036cbb..3aaf49aaa6 100644 --- a/labs/yocto-custom-machine/yocto-custom-machine.tex +++ b/labs/yocto-custom-machine/yocto-custom-machine.tex @@ -10,15 +10,18 @@ \section{Create a custom machine} The machine file configures various hardware related settings. That's -what we did in lab1, when we chose the \ifdefstring{\board}{stm32mp1} -{\code{stm32mp1}} {\ifdefstring{\board}{beagleplay}{\code{beagleplay}}{\code{beaglebone}}} one. -While it is not necessary to make our custom machine image here, we'll create a -new one to demonstrate the process. +what we did in lab1, when we chose the \board\ one. +While it is not necessary to make our custom machine image here, we'll create a new one to demonstrate the process. Add a new \code{bootlinlabs} machine to the previously created layer, which -will make the -\ifdefstring{\board}{stm32mp1}{Discovery}{{\ifdefstring{\board}{beagleplay}{BeaglePlay}{BeagleBone}}} -properly boot. +will make the \board\ properly boot. + +\if\defstring{\board}{imx93-frdm} +This machine describes a board using the \code{imx93} SoC and we take the board \code{imx93-evk} as a base. Add the following line to your machine configuration file: +\begin{verbatim} +require conf/machine/include/imx93-evk.inc +\end{verbatim} +\fi \if\defstring{\board}{stm32mp1} This machine describes a board using the \code{cortexa7thf-neon-vfpv4} @@ -32,8 +35,9 @@ \section{Create a custom machine} DEFAULTTUNE = "cortexa7thf-neon-vfpv4" require conf/machine/include/arm/armv7a/tune-cortexa7.inc \end{verbatim} -\else - \if\defstring{\board}{beagleplay} +\fi + +\if\defstring{\board}{beagleplay} This machine describes a board which is a part of the \code{am62xx} SoC family. This family is based on the arm64-based TI K3 platform. Add the following lines to your machine configuration file: @@ -46,7 +50,9 @@ \section{Create a custom machine} The \code{k3.inc} include defines a lot of useful variables, especially the \yoctovar{DEFAULTTUNE}. - \else +\fi + +\if\defstring{\board}{BeagleBone Black} This machine describes a board using the \code{cortexa8thf-neon} tune and is a part of the \code{ti33x} SoC family. Add the following lines to your machine configuration file: @@ -58,12 +64,43 @@ \section{Create a custom machine} DEFAULTTUNE = "armv7athf-neon" require conf/machine/include/arm/armv7a/tune-cortexa8.inc \end{verbatim} - \fi \fi + \section{Populate the machine configuration} This \code{bootlinlabs} machine needs: +\if\defstring{\board}{imx93-frdm} +\begin{itemize} + \item We must add the NXP firmware for DDR memory initialization +\begin{verbatim} +DDR_FIRMWARE_NAME = " \ + lpddr4_dmem_1d_v202201.bin \ + lpddr4_dmem_2d_v202201.bin \ + lpddr4_imem_1d_v202201.bin \ + lpddr4_imem_2d_v202201.bin \ +" +\end{verbatim} + + \item We must also specify which kernel recipe to choose, which device tree the kernel must use. We add that we want a rootfs of type tar. We specify the type of kernel image that we want: +\begin{verbatim} +KERNEL_DEVICETREE = "freescale/imx93-11x11-evk.dtb" +PREFERRED_PROVIDER_virtual/kernel = "linux-fslc-imx" +IMAGE_FSTYPES:append = " tar.gz" +KERNEL_IMAGETYPE = "Image" + +\end{verbatim} + + \item We must also specify the same elements for U-Boot. +\begin{verbatim} +UBOOT_CONFIG_BASENAME = "imx93_11x11_evk" +UBOOT_DTB_NAME = "imx93-11x11-evk.dtb" +PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot-imx" +\end{verbatim} +\end{itemize} +\fi + + \if\defstring{\board}{stm32mp1} \begin{itemize} \item To define a few variables to set to get the tooling from ST @@ -73,8 +110,10 @@ \section{Populate the machine configuration} STM32MP_DT_FILES_SDCARD = "stm32mp157a-dk1 stm32mp157d-dk1" \end{verbatim} \item To add \code{m4copro} to \yoctovar{MACHINE_FEATURES} -\else - \if\defstring{\board}{beagleplay} +\end{itemize} +\fi + +\if\defstring{\board}{beagleplay} \begin{itemize} \item To define a few variables to set to get the tooling from TI to work properly: @@ -99,7 +138,10 @@ \section{Populate the machine configuration} \begin{verbatim} require conf/machine/include/extlinux-bb.inc \end{verbatim} - \else +\end{itemize} +\fi + +\if\defstring{\board}{BeagleBone Black} \begin{itemize} \item To select \code{linux-bb.org} as the preferred provider for the kernel. @@ -131,9 +173,8 @@ \section{Populate the machine configuration} \item \code{alsa} \end{itemize} \item To add \code{tar.xz} as a rootfs type to generate. - \fi -\fi \end{itemize} +\fi \if\defstring{\board}{beagleplay} \section{Populate the k3r5 machine configuration} diff --git a/labs/yocto-extend-recipe/imx93-frdm-connect-nunchuk.png b/labs/yocto-extend-recipe/imx93-frdm-connect-nunchuk.png new file mode 100644 index 0000000000..b697f9da3a Binary files /dev/null and b/labs/yocto-extend-recipe/imx93-frdm-connect-nunchuk.png differ diff --git a/labs/yocto-extend-recipe/yocto-extend-recipe.tex b/labs/yocto-extend-recipe/yocto-extend-recipe.tex index 85bc1e2536..c15a5a533d 100644 --- a/labs/yocto-extend-recipe/yocto-extend-recipe.tex +++ b/labs/yocto-extend-recipe/yocto-extend-recipe.tex @@ -17,8 +17,23 @@ \section{Create a basic appended recipe} to the original recipe, to see how it is integrated into the build. We will then extend some configuration variables of the original recipe. -We here aim to extend the \ifdefstring{\board}{stm32mp1}{\code{linux-stm32mp}} -{{\ifdefstring{\board}{beagleplay}{\code{linux-ti-staging}}{\code{linux-bb.org}}}} kernel recipe. +\ifdefstring{\board}{bbb}{ + \def\linuxrecipename{linux-bb.org} +}{} + +\ifdefstring{\board}{stm32mp1}{ + \def\linuxrecipename{linux-stm32mp} +}{} + +\ifdefstring{\board}{beagleplay}{ + \def\linuxrecipename{linux-ti-staging} +}{} + +\ifdefstring{\board}{imx93-frdm}{ + \def\linuxrecipename{linux-fslc-imx} +}{} + +We here aim to extend the \linuxrecipename kernel recipe. Try to create an appended recipe using the guidelines given in the slides. @@ -42,19 +57,25 @@ \section{Create a basic appended recipe} $HOME/__SESSION_NAME__-labs/meta-bootlinlabs/recipes-kernel/linux/linux-ti-staging_6.6.bbappend \end{verbatim} \else + \if\defstring{\board}{bbb} \begin{verbatim} linux-bb.org_git.bb: $HOME/__SESSION_NAME__-labs/meta-bootlinlabs/recipes-kernel/linux/linux-bb.org_git.bbappend \end{verbatim} + \else + \if\defstring{\board}{imx93-frdm} +\begin{verbatim} +linux-fslc-imx_6.6.bb: + $HOME/__SESSION_NAME__-labs/meta-bootlinlabs/recipes-kernel/linux/linux-fslc-imx_6.6.bbappend +\end{verbatim} + \fi + \fi \fi \fi \section{Add patches to apply in the recipe} -We want our extended -\ifdefstring{\board}{stm32mp1}{\code{linux-stm32mp}} -{{\ifdefstring{\board}{beagleplay}{\code{linux-ti-staging}}{\code{linux-bb.org}}}} -kernel to support the Nunchuk as +We want our extended \linuxrecipename kernel to support the Nunchuk as a joystick input. We can add this by applying patches during the \code{do_patch} task. The needed patches are provided with this lab. You can find them under \code{~/__SESSION_NAME__-labs/bootlin-lab-data/nunchuk/linux}. For more @@ -75,6 +96,9 @@ \section{Add patches to apply in the recipe} Add \code{KERNEL_DEFCONFIG = ""} and \code{KERNEL_EXTERNAL_DEFCONFIG = "defconfig"} so it is used by the \code{linux-stm32mp} recipe. \footnote{These settings are specific to the \code{linux-stm32mp} recipe!} +\fi +\if\defstring{\board}{imx93-frdm} +Add \code{KBUILD_DEFCONFIG:imx93-11x11-lpddr4x-evk = ""} to allow the use of our \code{defconfig} file. \else It is handled automatically in the \ifdefstring{\board}{beagleplay}{\code{linux-ti-staging}}{\code{linux-bb.org}} original recipe. @@ -110,7 +134,7 @@ \section{Connect the Nunchuk} \begin{center} \includegraphics[width=12cm]{common/dk1-nunchuk-connect.jpg} \end{center} -}{ +} \ifdefstring{\board}{beagleplay}{ Connect the Nunchuk pins: \begin{itemize} @@ -123,6 +147,19 @@ \section{Connect the Nunchuk} \begin{center} \includegraphics[width=12cm]{common/beagleplay-connect-nunchuk.jpg} \end{center} +} +\ifdefstring{\board}{imx93-frdm}{ +Connect the Nunchuk pins: +\begin{itemize} +\item The \code{GND} pin to P12 pin 6 (\code{GND}) +\item The \code{PWR} pin to P12 pin 1 (\code{3V3}) +\item The \code{SDA} pin to P12 pin 9 (\code{SDA}) +\item The \code{SCL} pin to P12 pin 7 (\code{SCL}) +\end{itemize} + +\begin{center} +\includegraphics[width=12cm]{labs/yocto-extend-recipe/imx93-frdm-connect-nunchuk.png} +\end{center} }{ Connect the Nunchuk pins: \begin{itemize} @@ -135,7 +172,7 @@ \section{Connect the Nunchuk} \begin{center} \includegraphics[width=12cm]{common/bbb-connect-nunchuk.pdf} \end{center} -}} +} \section{Test the Nunchuk} diff --git a/labs/yocto-first-build-imx93-frdm/yocto-first-build-imx93-frdm.tex b/labs/yocto-first-build-imx93-frdm/yocto-first-build-imx93-frdm.tex new file mode 100644 index 0000000000..247f854627 --- /dev/null +++ b/labs/yocto-first-build-imx93-frdm/yocto-first-build-imx93-frdm.tex @@ -0,0 +1,163 @@ +\subchapter{Lab1: First Yocto Project build}{Your first dive into Yocto +Project and its build mechanism} + +During this lab, you will: +\begin{itemize} + \item Set up an OpenEmbedded environment + \item Configure the project and choose a target + \item Build your first Poky image +\end{itemize} + +\section{Setup} + +Before starting this lab, make sure your home directory is not +encrypted using eCryptFS. OpenEmbedded cannot be used on top of an eCryptFS file +system due to limitations in file name lengths. + +Install the required packages: +\begin{bashinput} +sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential \ + chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils \ + iputils-ping python3-git python3-jinja2 python3-subunit zstd liblz4-tool \ + file locales libacl1 +\end{bashinput} + +\section{Avoiding unprivileged user namespace restrictions} + +Ubuntu 24.04 added an apparmor policy preventing usage of unprivileged user +namespace restrictions to improve security. Unfortunately this prevents +bitbake from working, because it uses namespaces to forbid untracked +downloads outside of the \code{do_fetch} task. Ironically, bitbake does +this to improve security. This results in the following error message: + +\begin{verbatim} +ERROR: PermissionError: [Errno 1] Operation not permitted +... + with open("/proc/self/uid_map", "w") as f: +\end{verbatim} + +To disable this apparmor restriction, run this command in a shell: + +\begin{bashinput} +echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns +\end{bashinput} + +You will need to run this command every time you reboot your machine. + +For more information, including how to disable this restriction +persistently, see +\href{https://discourse.ubuntu.com/t/ubuntu-24-04-lts-noble-numbat-release-notes/39890#p-99950-unprivileged-user-namespace-restrictions} + {the Ubuntu 24.04 Release Notes}. + +\section{Download Yocto} + +Go to the \code{$HOME/__SESSION_NAME__-labs/} directory. + +Download the \code{scarthgap} version of Poky: +\begin{bashinput} +git clone https://git.yoctoproject.org/git/poky +cd $HOME/__SESSION_NAME__-labs/poky +git checkout -b scarthgap-5.0.4 scarthgap-5.0.4 +\end{bashinput} + +Return to your project root directory (\code{cd $HOME/__SESSION_NAME__-labs/}) +and download the \code{meta-openembedded}, \code{meta-arm}, and \code{meta-freescale} layers: +\begin{bashinput} +git clone -b scarthgap https://github.com/openembedded/meta-openembedded.git +git clone -b scarthgap https://git.yoctoproject.org/git/meta-arm +git clone -b scarthgap https://github.com/Freescale/meta-freescale.git +\end{bashinput} + +\section{Set up the build environment} + +Check you're using Bash. This is the default shell when using Ubuntu. + +Export all needed variables and set up the build directory: +\begin{bashinput} +cd $HOME/__SESSION_NAME__-labs +source poky/oe-init-build-env +\end{bashinput} + +You must specify which machine is your target. By default it +is \code{qemu}. We need to build an image for an \code{imx93-11x11-lpddr4x-evk}. +Update the \yoctovar{MACHINE} configuration variable accordingly. + +You must also accept the Freescale EULA by adding the following line to the +\code{local.conf} file: \code{ACCEPT_FSL_EULA = "1"}. + +Also, if you need to save disk space on your computer you can add \code{INHERIT ++= "rm_work"} in the previous configuration file. This will remove the +package work directory once a package is built. + +Don't forget to update the configuration to include all the layers you have just added. Edit the +layer configuration file (\code{$BUILDDIR/conf/bblayers.conf}) and append the +full path to the \code{meta-freescale}, +\code{meta-arm/meta-arm}, \code{meta-arm/meta-arm-toolchain}, \code{meta-openembedded/meta-python}, +\code{meta-openembedded/meta-oe}, and \code{meta-openembedded/meta-multimedia} +directories to the \code{BBLAYERS} variable. + +\section{Build your first image} + +Now that you're ready to start the compilation, simply run: +\begin{bashinput} +bitbake core-image-minimal +\end{bashinput} + +Once the build finished, you will find the output images under +\code{$BUILDDIR/tmp/deploy/images/imx93-11x11-lpddr4x-evk}. + +\section{Set up the SD card} + +In this first lab we will use an SD card to store the bootloader, kernel and +root filesystem files. The SD card image has been generated and is +named \code{core-image-minimal-imx93-11x11-lpddr4x-evk.rootfs.wic.gz}. + +Now flash the image with the following command: +\begin{bashinput} +gunzip -c core-image-minimal-imx93-11x11-lpddr4x-evk.rootfs.wic.gz | sudo dd of=/dev/mmcblkX conv=fdatasync bs=1M status=progress +\end{bashinput} + +\section{Setting up serial communication with the board} +To set up serial communication with the board, simply connect the USB-C cable to the port labeled DEBUG. + +Once the cable is plugged in, a new serial port +should appear: \code{/dev/ttyACM0}. You can also see this device +appear by looking at the output of \code{dmesg}. + +To communicate with the board through the serial port, install a +serial communication program, such as \code{picocom}: + +\begin{bashinput} +sudo apt install picocom +\end{bashinput} + +If you run \code{ls -l /dev/ttyACM0}, you can also see that only +\code{root} and users belonging to the \code{dialout} group have +read and write access to this file. Therefore, you need to add your user +to the \code{dialout} group: + +\begin{bashinput} +sudo adduser $USER dialout +\end{bashinput} + +{\bf Important}: for the group change to be effective, in Ubuntu 18.04, you have to +{\em completely reboot} the system \footnote{As explained on +\url{https://askubuntu.com/questions/1045993/after-adding-a-group-logoutlogin-is-not-enough-in-18-04/}.}. +A workaround is to run \code{newgrp dialout}, but it is not global. +You have to run it in each terminal. + +Now, you can run \code{picocom -b 115200 /dev/ttyACM0}, to start serial +communication on \code{/dev/ttyACM0}, with a baudrate of \code{115200}. If +you wish to exit \code{picocom}, press \code{[Ctrl][a]} followed by +\code{[Ctrl][x]}. + +There should be nothing on the serial line so far, as the board is not +powered up yet. + +\section{Boot} +Insert the SD card in the dedicated slot on the imx93-frdm. Make sure that switches 1 and 2 in the center of the board are set to ON, and switches 3 and 4 are set to OFF. + +Plug in the power USB-C. You should see boot messages on the console. + +Wait until the login prompt, then enter \code{root} as user. +Congratulations! The board has booted and you now have a shell. diff --git a/labs/yocto-layer/yocto-layer.tex b/labs/yocto-layer/yocto-layer.tex index 33d795bacf..a234ae1ef0 100644 --- a/labs/yocto-layer/yocto-layer.tex +++ b/labs/yocto-layer/yocto-layer.tex @@ -38,11 +38,25 @@ \section{Create a new layer} \section{Integrate a layer to the build} +\ifdefstring{\board}{bbb}{ + \def\bsplayername{meta-ti} +}{} + +\ifdefstring{\board}{stm32mp1}{ + \def\bsplayername{meta-st-stm32} +}{} + +\ifdefstring{\board}{beagleplay}{ + \def\bsplayername{meta-ti} +}{} + +\ifdefstring{\board}{imx93-frdm}{ + \def\bsplayername{meta-freescale} +}{} + To be fair, we already used and integrated a layer in our build configuration -during the first lab, with \ifdefstring{\board}{stm32mp1} -{\code{meta-st-stm32}} {\code{meta-ti}}. This layer was responsible for \ifdefstring{\board}{stm32mp1} {\code{stm32mp1 DK1}} -{\ifdefstring{\board}{beagleplay} {\code{BeaglePlay}} {\code{BeagleBone Black}}} support in Yocto. We have to do the same for our -\code{meta-bootlinlabs} now. +during the first lab, with \bsplayername. This layer was responsible for +\boarddescription support in Yocto. We have to do the same for our \code{meta-bootlinlabs} now. There is a file which contains all the paths of the layers we use. Try to find it without looking back to the first lab. Then add the full path to our newly diff --git a/labs/yocto-sdk/yocto-sdk.tex b/labs/yocto-sdk/yocto-sdk.tex index f18295eb97..378a416509 100644 --- a/labs/yocto-sdk/yocto-sdk.tex +++ b/labs/yocto-sdk/yocto-sdk.tex @@ -57,6 +57,11 @@ \section{Install the SDK} $BUILDDIR/tmp/deploy/sdk/poky-glibc-x86_64-bootlinlabs-image-minimal-aarch64-bootlinlabs-toolchain-5.0.4.sh \end{verbatim} \fi +\if\defstring{\board}{imx93-frdm} +\begin{verbatim} +$BUILDDIR/tmp/deploy/sdk/poky-glibc-x86_64-bootlinlabs-image-minimal-cortexa55-bootlinlabs-toolchain-5.0.4.sh +\end{verbatim} +\fi } \section{Set up the environment} @@ -78,7 +83,11 @@ \section{Set up the environment} source environment-setup-aarch64-poky-linux \end{verbatim} \fi - +\if\defstring{\board}{imx93-frdm} +\begin{verbatim} +source environment-setup-cortexa55-poky-linux +\end{verbatim} +\fi Have a look at the exported environment variables: \begin{verbatim} env @@ -123,7 +132,7 @@ \section{Compile an application in the SDK} You can check the application was successfully compiled for the right target by using the \code{file} command. The \code{ctris} binary should be -an ELF \ifdefstring{\board}{beagleplay}{64}{32}-bit LSB +an ELF \ifdefstring{\board}{beagleplay}{64}{\ifdefstring{\board}{imx93-frdm}{64}{32}}-bit LSB executable compiled for ARM. Finally, you can copy the binary to the board, by using the \code{scp} diff --git a/mk/yocto.mk b/mk/yocto.mk index 01cd298d74..b3840fe58c 100644 --- a/mk/yocto.mk +++ b/mk/yocto.mk @@ -35,7 +35,8 @@ YOCTO_SLIDES = \ last-slides \ yocto-extra-slides -YOCTO_BBB_LABS = setup \ +YOCTO_BBB_LABS = \ + setup \ yocto-first-build \ yocto-advanced-configuration \ yocto-add-application \ @@ -46,7 +47,8 @@ YOCTO_BBB_LABS = setup \ yocto-sdk \ yocto-devtool -YOCTO_BEAGLEPLAY_LABS = setup \ +YOCTO_BEAGLEPLAY_LABS = \ + setup \ yocto-first-build-beagleplay \ yocto-advanced-configuration-beagleplay \ yocto-add-application \ @@ -57,7 +59,8 @@ YOCTO_BEAGLEPLAY_LABS = setup \ yocto-sdk \ yocto-devtool -YOCTO_STM32MP1_LABS = setup \ +YOCTO_STM32MP1_LABS = \ + setup \ yocto-first-build-stm32 \ yocto-advanced-configuration-stm32 \ yocto-add-application \ @@ -67,3 +70,15 @@ YOCTO_STM32MP1_LABS = setup \ yocto-custom-image \ yocto-sdk \ yocto-devtool + +YOCTO_IMX93_FRDM_LABS = \ + setup \ + yocto-first-build-imx93-frdm \ + yocto-advanced-configuration-imx93-frdm \ + yocto-add-application \ + yocto-layer \ + yocto-extend-recipe \ + yocto-custom-machine \ + yocto-custom-image \ + yocto-sdk \ + yocto-devtool