/r/embeddedlinux
A place for everything related to Embedded Linux, news, articles, talks etc.
Embedded Linux news, articles, talks... etc.
/r/embeddedlinux
I've been diving into yocto and building my own recipes and you all have been great. So, thank you for that.
I have a recipe that is doing a cmake build, but the cmake files do not provide an install method. So I am doing that manually. However, the libraries I copy to /usr/lib do not show up.
All other files references below are in the target image. Just not the static libs.
LICENSE = "MPL-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=815ca599c9df247a0c7f619bab123dad"
S = "${WORKDIR}/git"
inherit cmake
EXTRA_OECMAKE += "-DFETCHCONTENT_FULLY_DISCONNECTED=FALSE -DBUILD_TESTING=OFF -DENABLE_EXAMPLES=ON -DBUILD_DOCS=OFF -DENABLE_TRACING=ON -DCMAKE_BUILD_TYPE=Release"
# Add protobuf-native and protobuf as dependencies
DEPENDS = "googletest googlebenchmark protobuf-native protobuf"
# Fetch source code from a Git repository
SRC_URI += "git://github.com/cactusdynamics/cactus-rt.git;protocol=https;branch=master"
SRCREV="${AUTOREV}"
FILES:${PN} += "${datadir}"
do_install() {
install -d "${D}"/usr/lib
install -d "${D}"/usr/include
install -d "${D}"/usr/include/cactus_rt
install -d "${D}"/usr/include/quill
install -d "${D}"/usr/include/readerwriterqueue
install -d "${D}"/usr/share
install -d "${D}"/usr/share/cactus_rt
install -d "${D}"/usr/share/cactus_rt/examples
cp -r "${S}"/include/cactus_rt "${D}"/usr/include
cp -r "${B}"/_deps/quill-src/quill/include/quill "${D}"/usr/include
install -m 0644 "${B}"/_deps/readerwriterqueue-src/atomicops.h "${D}"/usr/include/readerwriterqueue
install -m 0644 "${B}"/_deps/readerwriterqueue-src/readerwriterqueue.h "${D}"/usr/include/readerwriterqueue
install -m 0644 "${B}"/_deps/readerwriterqueue-src/readerwritercircularbuffer.h "${D}"/usr/include/readerwriterqueue
install -m 0644 "${B}"/libcactus_rt.a "${D}"/usr/lib
install -m 0644 "${B}"/_deps/quill-build/quill/libquill.a "${D}"/usr/lib
find "${B}"/examples -type f -executable -exec cp {} "${D}"/usr/share/cactus_rt/examples \;
}
I've never used jtag before so I'm not that familiar with its capabilities. I have a problem where my device locks up. The watchdog will get it eventually unless I turn off the watchdog. The problem is there is no crash dump or log or message of any kind. I probably have a few hundred hours into this bug over years, and have figured out that recording from the I2S microphone causes the hang, and it happens weather the microphone is connected or not. Is this the sort of thing that jtag would be helpful for? The processor is an im8 cortex A53 if anybody had any ideas on the best jtag for that.
You know, the thing with the i2c_driver struct which you define with the probe function? What is probing in this case? Does the i2c support hot pluging or does the i2c lines get tested when the module gets loaded. I'm asking because there is no equivalent for that in spi
I'm just curious to read what kind of products are you guys creating with the use of embedded Linux? Robots, AI vision systems, medical, HMI, etc..?
Hello,
My personal laptop run on Manjaro Linux, so I decided to use crops container to run Yocto avoiding weird issues.
Now I am thinking to use equivalent container for app building with generate sdk : https://github.com/crops/extsdk-container
What do you think about this container and this workflow ?
I want to try to build Qt app with this container. I saw that Qt creator offer docker plugin to do that. But how to run the container with right options like sdk and mount directory ? Then how to select this toolchain inside Qtcreator ?
Thank for advice and help
I've got linux running on a TI625 processor (4 cores) with a custom 6.12 kernel.
I have the following kernel config enabled (And more, but these are the ones for timing and preempt)
CONFIG_PREEMPT_RT=y
CONFIG_PREEMPT_COUNT=y
CONFIG_PREEMPTION=y
CONFIG_PREEMPT_RCU=y
CONFIG_HAVE_PREEMPT_DYNAMIC=y
CONFIG_HAVE_PREEMPT_DYNAMIC_KEY=y
CONFIG_NO_HZ_COMMON=y
CONFIG_NO_HZ_FULL=y
CONFIG_HZ_1000=y
CONFIG_HZ=1000
I'm using this small piece of code: #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <time.h>
#include <errno.h>
#include <gpiod.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LOOP_FREQUENCY_HZ 2
#define THOUSAND 1000LL
#define MILLION 1000000LL
#define BILLION 1000000000LL
#define LINE_OFFSET 41
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
long long get_ms(void) {
static struct timespec start_time;
struct timespec end_time;
long long ms;
if (!start_time.tv_sec) {
printf("Starting clock\n");
clock_gettime(CLOCK_MONOTONIC, &start_time);
}
clock_gettime(CLOCK_MONOTONIC, &end_time);
ms = (end_time.tv_sec - start_time.tv_sec) * THOUSAND;
ms += (end_time.tv_nsec - start_time.tv_nsec) / MILLION;
return ms;
}
void *unlockMutex(void *arg) {
struct timespec sleep_duration;
sleep_duration.tv_sec = 0;
sleep_duration.tv_nsec = BILLION / LOOP_FREQUENCY_HZ;
while (1) {
pthread_mutex_unlock(&mutex);
clock_nanosleep(CLOCK_MONOTONIC, 0, &sleep_duration, NULL);
}
pthread_exit(NULL);
}
void *lockMutex(void *arg) {
while (1) {
pthread_mutex_lock(&mutex);
printf("%lld\n", get_ms());
}
pthread_exit(NULL);
}
int main() {
pthread_t thread1, thread2;
pthread_attr_t attr;
struct sched_param params;
pthread_attr_init(&attr);
pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
pthread_attr_setschedpolicy(&attr, SCHED_FIFO);
params.sched_priority = sched_get_priority_max(SCHED_FIFO);
pthread_attr_setschedparam(&attr, ¶ms);
get_ms();
// Create two threads
pthread_create(&thread1, &attr, unlockMutex, NULL);
pthread_create(&thread2, &attr, lockMutex, NULL);
getchar();
pthread_cancel(thread1);
pthread_cancel(thread2);
return 0;
}
The result is not what I would expect:
Starting clock
1
500
1000
1500
2000
2500
3000
3500
4001
4501
5001
5501
6001
6501
7001
7501
...
84509
So after about 85 seconds the timing has slipped about 10ms. I know it's not much, but I would have expected it to be more precise.
Is this expected or are there other config/code changes I can make?
Hi All,
Looking for a dev board with these specs:
Do you have any suggestions?
With kind regards,
Matthijs
Right now I am starting embeddinglinux I need to install bitbake I have got git file for download but the file is very slow can anyone give a alternative source to download
This is going to be a pretty good amount of context to a simple question in order to avoid the good old XY problem.
for my company i was in charge of getting a specific USB card reader working for a client of ours on an embedded linux system (that is quite old and with no hope of updating it). the problem was that we initially had to information on the product so our management reached out to the manufacturer and made some kind of deal (in which we had to purchase a certain amount of product) in order to get some drivers for the device. These drivers came in the form of a .h file, some pdf documents, 4 directories x64 x86 MIPS arm64 which contianed a bunch of .o files and a makefile that linked these .o files to static and shared libs (.a and .so for linux) for each architecture. This make file also dynamically linked the drivers on libusb-1.0 and libpthread which is fine since that is on our embedded device.
Great so i ended up making some additional abstractions in C according to our customers needs and tested them on my computer using the x64 libraries and that went fine.
The problem came when i had to port all of this to our 32bit embedded linux device.
first i tried compiling it on our development environment ( debian jessie VM ) with the static library since i wanted to avoid having to copy that shared library to all of the embedded devices. This did not work since the GCC version was to old on the dev environment to where the linker kept complaining about relocations on the x86 .o files (which were embedded in the static library)
My solution to this was to simply put the .o files into ghidra and remake the drivers in c since i only really used about 5 functions from the drivers and i knew that the drivers used libusb anyways. Also i saw this as having the upside of having the source code. I got this done in 1 day.
This worked OK but we have been having some stability issues with the card reader not being recognized on the device when doing hot reboots. so to test whether it is my remake of the drivers that is the issue i wanted to get the original drivers working with the x86 .o files.
Now what i did was cross compiled a test program with my custom driver and the old driver on my PC with libusb and libpthread. this went well until i tried to run it on the embedded linux device. it pretty much says that the program requires a newer version of Glibc (2.34) than what is available on the embedded device (2.19)
I cannot change the embedded device by updating the glibc. so how do i compile against an older glibc from my personal computer
thank you to anyone who read all of this and can help me.
this seems to be my primary error message
$ sudo cat /sys/kernel/debug/devices_deferred
sound-header asoc-simple-card: parse error
also in dmesg
$ dmesg | grep -i "sai\|sound\|asoc"
[ 0.062412] Advanced Linux Sound Architecture Driver Initialized.
[ 2.222903] No soundcards found.
[ 16.097224] platform sound-header: deferred probe pending
Hi !
I am currently working on a library for an embedded linux target in C. It is for a SPI chip. It might be integrated as a device driver later. I am new to embedded linux (I have some baremetal/RTOS/soft background).
How do I test the library ? Should I check some frameworks ?
Tests I'm thinking about:
For the rest of the setup (feel free if you have some comments):
Thanks for reading !
Alsa does not recognize my i2s pins or dummy card. I am on kernel 6.1
+ sudo cat /sys/kernel/debug/devices_deferred
sound-header asoc-simple-card: parse error
+ sudo ls /sys/kernel/debug/asoc/
components dais
++ uname -r
+ sudo ls ls /lib/modules/6.1.36/kernel/sound/
ls: cannot access 'ls': No such file or directory
/lib/modules/6.1.36/kernel/sound/:
core drivers soc usb
+ ls /proc/device-tree/
'#address-cells' clock-osc-25m name
'#size-cells' clock-osc-27m opp-table
aliases clock-pmic pmu
busfreq compatible pps
chosen cpus psci
clock-ckil dummy-dai regulator-usdhc2-vmmc
clock-ext1 gpio-fan soc@0
clock-ext2 gpu3d@38000000 sound-header
clock-ext3 interrupt-parent thermal-zones
clock-ext4 memory@40000000 timer
clock-hdmi-phy-27m model
+ ls /sys/bus/platform/devices/
100000.caam-sm 33000000.dma-apbh
30000000.bus 38100000.usb
30000000.bus:caam_secvio 381f0040.usb-phy
30010000.sai 38200000.usb
30200000.gpio 382f0040.usb-phy
30210000.gpio 3d800000.ddr-pmu
30220000.gpio 'Fixed MDIO bus.0'
30230000.gpio alarmtimer.0.auto
30240000.gpio bd71837-clk.2.auto
30260000.tmu bd71837-pmic.3.auto
30280000.watchdog busfreq
302c0000.dma-controller caam-dma
30330000.pinctrl caam_sm
30340000.syscon cpufreq-dt
30340000.syscon:mux-controller dummy-dai
30350000.efuse gpio-fan
30350000.efuse:imx8mq-soc gpio-keys.1.auto
30360000.syscon imx-cpufreq-dt
30370000.caam-snvs imx-pgc-domain.0
30370000.snvs imx-pgc-domain.1
30370000.snvs:snvs-rtc-lp imx-pgc-domain.10
30380000.clock-controller imx-pgc-domain.2
30390000.reset-controller imx-pgc-domain.3
303a0000.gpc imx-pgc-domain.4
30400000.bus imx-pgc-domain.5
30660000.pwm imx-pgc-domain.6
30670000.pwm imx-pgc-domain.7
30680000.pwm imx-pgc-domain.8
30690000.pwm imx-pgc-domain.9
306a0000.timer platform-framebuffer.0
30800000.bus pmu
30820000.spi pps
30860000.serial psci
30880000.serial psci-cpuidle
30900000.crypto reg-dummy
30902000.jr regulator-usdhc2-vmmc
30903000.jr regulatory.0
30a20000.i2c serial8250
30aa0000.mailbox snd-soc-dummy
30b40000.mmc soc@0
30b50000.mmc sound-header
30bd0000.dma-controller timer
30be0000.ethernet xhci-hcd.4.auto
32c00000.bus xhci-hcd.5.auto
32e2d000.interrupt-controller
+ ls /dev/snd/
timer
+ ls /proc/asound/
cards devices pcm timers version
+ ls /sys/class/sound/
timer
+ dmesg
+ grep -iE 'alsa|audio|sai|snd|sound|deferred'
[ 0.063840] Advanced Linux Sound Architecture Driver Initialized.
[ 2.197728] ALSA device list:
[ 2.200699] No soundcards found.
[ 16.094656] platform sound-header: deferred probe pending
+ zcat /proc/config.gz
These are the relevant portions of my linux config.
+ grep -iE 'snd|sound'
CONFIG_REGMAP_SOUNDWIRE=m
CONFIG_SOUND=y
CONFIG_SND=y
CONFIG_SND_TIMER=y
CONFIG_SND_PCM=y
CONFIG_SND_PCM_ELD=y
CONFIG_SND_PCM_IEC958=y
CONFIG_SND_DMAENGINE_PCM=y
CONFIG_SND_HWDEP=m
CONFIG_SND_RAWMIDI=y
CONFIG_SND_COMPRESS_OFFLOAD=y
CONFIG_SND_JACK=y
CONFIG_SND_JACK_INPUT_DEV=y
# CONFIG_SND_OSSEMUL is not set
CONFIG_SND_PCM_TIMER=y
# CONFIG_SND_HRTIMER is not set
CONFIG_SND_DYNAMIC_MINORS=y
CONFIG_SND_MAX_CARDS=32
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_PROC_FS=y
CONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
CONFIG_SND_CTL_FAST_LOOKUP=y
CONFIG_SND_DEBUG=y
CONFIG_SND_DEBUG_VERBOSE=y
# CONFIG_SND_PCM_XRUN_DEBUG is not set
# CONFIG_SND_CTL_INPUT_VALIDATION is not set
# CONFIG_SND_CTL_DEBUG is not set
# CONFIG_SND_JACK_INJECTION_DEBUG is not set
# CONFIG_SND_SEQUENCER is not set
CONFIG_SND_DRIVERS=y
# CONFIG_SND_DUMMY is not set
CONFIG_SND_ALOOP=m
# CONFIG_SND_MTPAV is not set
# CONFIG_SND_SERIAL_U16550 is not set
# CONFIG_SND_SERIAL_GENERIC is not set
# CONFIG_SND_MPU401 is not set
CONFIG_SND_PCI=y
# CONFIG_SND_AD1889 is not set
# CONFIG_SND_ALS300 is not set
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ATIIXP is not set
# CONFIG_SND_ATIIXP_MODEM is not set
# CONFIG_SND_AU8810 is not set
# CONFIG_SND_AU8820 is not set
# CONFIG_SND_AU8830 is not set
# CONFIG_SND_AW2 is not set
# CONFIG_SND_AZT3328 is not set
# CONFIG_SND_BT87X is not set
# CONFIG_SND_CA0106 is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_OXYGEN is not set
# CONFIG_SND_CS4281 is not set
# CONFIG_SND_CS46XX is not set
# CONFIG_SND_CTXFI is not set
# CONFIG_SND_DARLA20 is not set
# CONFIG_SND_GINA20 is not set
# CONFIG_SND_LAYLA20 is not set
# CONFIG_SND_DARLA24 is not set
# CONFIG_SND_GINA24 is not set
# CONFIG_SND_LAYLA24 is not set
# CONFIG_SND_MONA is not set
# CONFIG_SND_MIA is not set
# CONFIG_SND_ECHO3G is not set
# CONFIG_SND_INDIGO is not set
# CONFIG_SND_INDIGOIO is not set
# CONFIG_SND_INDIGODJ is not set
# CONFIG_SND_INDIGOIOX is not set
# CONFIG_SND_INDIGODJX is not set
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_EMU10K1X is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
# CONFIG_SND_ES1938 is not set
# CONFIG_SND_ES1968 is not set
# CONFIG_SND_FM801 is not set
# CONFIG_SND_HDSP is not set
# CONFIG_SND_HDSPM is not set
# CONFIG_SND_ICE1712 is not set
# CONFIG_SND_ICE1724 is not set
# CONFIG_SND_INTEL8X0 is not set
# CONFIG_SND_INTEL8X0M is not set
# CONFIG_SND_KORG1212 is not set
# CONFIG_SND_LOLA is not set
# CONFIG_SND_LX6464ES is not set
# CONFIG_SND_MAESTRO3 is not set
# CONFIG_SND_MIXART is not set
# CONFIG_SND_NM256 is not set
# CONFIG_SND_PCXHR is not set
# CONFIG_SND_RIPTIDE is not set
# CONFIG_SND_RME32 is not set
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_SE6X is not set
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_VIA82XX is not set
# CONFIG_SND_VIA82XX_MODEM is not set
# CONFIG_SND_VIRTUOSO is not set
# CONFIG_SND_VX222 is not set
# CONFIG_SND_YMFPCI is not set
# CONFIG_SND_HDA_INTEL is not set
CONFIG_SND_HDA_PREALLOC_SIZE=64
CONFIG_SND_SPI=y
CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=m
CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y
# CONFIG_SND_USB_UA101 is not set
# CONFIG_SND_USB_CAIAQ is not set
# CONFIG_SND_USB_6FIRE is not set
# CONFIG_SND_USB_HIFACE is not set
# CONFIG_SND_BCD2000 is not set
# CONFIG_SND_USB_POD is not set
# CONFIG_SND_USB_PODHD is not set
# CONFIG_SND_USB_TONEPORT is not set
# CONFIG_SND_USB_VARIAX is not set
CONFIG_SND_SOC=y
CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
CONFIG_SND_SOC_COMPRESS=y
CONFIG_SND_SOC_TOPOLOGY=y
# CONFIG_SND_SOC_ADI is not set
# CONFIG_SND_SOC_AMD_ACP is not set
# CONFIG_SND_AMD_ACP_CONFIG is not set
# CONFIG_SND_ATMEL_SOC is not set
# CONFIG_SND_BCM63XX_I2S_WHISTLER is not set
# CONFIG_SND_DESIGNWARE_I2S is not set
CONFIG_SND_SOC_FSL_ASRC=m
CONFIG_SND_SOC_FSL_SAI=y
CONFIG_SND_SOC_FSL_MQS=m
CONFIG_SND_SOC_FSL_AUDMIX=m
CONFIG_SND_SOC_FSL_SSI=m
CONFIG_SND_SOC_FSL_SPDIF=m
CONFIG_SND_SOC_FSL_ESAI=m
CONFIG_SND_SOC_FSL_MICFIL=m
CONFIG_SND_SOC_FSL_EASRC=m
CONFIG_SND_SOC_FSL_XCVR=m
CONFIG_SND_SOC_FSL_AUD2HTX=m
CONFIG_SND_SOC_FSL_ESAI_CLIENT=y
CONFIG_SND_SOC_FSL_UTILS=y
CONFIG_SND_SOC_FSL_RPMSG=m
CONFIG_SND_SOC_IMX_PCM_DMA=y
CONFIG_SND_SOC_IMX_AUDIO_RPMSG=m
CONFIG_SND_SOC_IMX_PCM_RPMSG=m
CONFIG_SND_SOC_IMX_AUDMUX=m
CONFIG_SND_IMX_SOC=m
# CONFIG_SND_SOC_IMX_ES8328 is not set
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_RPMSG=m
CONFIG_SND_SOC_IMX_CARD=m
CONFIG_SND_SOC_IMX_PCM512X=m
# CONFIG_SND_I2S_HI6210_I2S is not set
# CONFIG_SND_SOC_IMG is not set
# CONFIG_SND_SOC_INTEL_KEEMBAY is not set
# CONFIG_SND_SOC_MTK_BTCVSD is not set
CONFIG_SND_SOC_SOF_TOPLEVEL=y
# CONFIG_SND_SOC_SOF_PCI is not set
# CONFIG_SND_SOC_SOF_ACPI is not set
CONFIG_SND_SOC_SOF_OF=m
CONFIG_SND_SOC_SOF_OF_DEV=m
CONFIG_SND_SOC_SOF_COMPRESS=y
CONFIG_SND_SOC_SOF=m
CONFIG_SND_SOC_SOF_IPC3=y
CONFIG_SND_SOC_SOF_IMX_TOPLEVEL=y
CONFIG_SND_SOC_SOF_IMX_COMMON=m
CONFIG_SND_SOC_SOF_IMX8=m
CONFIG_SND_SOC_SOF_IMX8M=m
CONFIG_SND_SOC_SOF_IMX8ULP=m
# CONFIG_SND_SOC_SOF_MTK_TOPLEVEL is not set
CONFIG_SND_SOC_SOF_XTENSA=m
# CONFIG_SND_SOC_XILINX_I2S is not set
# CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER is not set
# CONFIG_SND_SOC_XILINX_SPDIF is not set
# CONFIG_SND_SOC_XTFPGA_I2S is not set
CONFIG_SND_SOC_I2C_AND_SPI=y
CONFIG_SND_SOC_WM_HUBS=m
# CONFIG_SND_SOC_AC97_CODEC is not set
# CONFIG_SND_SOC_ADAU1372_I2C is not set
# CONFIG_SND_SOC_ADAU1372_SPI is not set
# CONFIG_SND_SOC_ADAU1701 is not set
# CONFIG_SND_SOC_ADAU1761_I2C is not set
# CONFIG_SND_SOC_ADAU1761_SPI is not set
# CONFIG_SND_SOC_ADAU7002 is not set
# CONFIG_SND_SOC_ADAU7118_HW is not set
# CONFIG_SND_SOC_ADAU7118_I2C is not set
# CONFIG_SND_SOC_AK4104 is not set
# CONFIG_SND_SOC_AK4118 is not set
# CONFIG_SND_SOC_AK4375 is not set
CONFIG_SND_SOC_AK4458=m
# CONFIG_SND_SOC_AK4554 is not set
CONFIG_SND_SOC_AK4613=m
# CONFIG_SND_SOC_AK4642 is not set
# CONFIG_SND_SOC_AK5386 is not set
CONFIG_SND_SOC_AK5558=m
# CONFIG_SND_SOC_ALC5623 is not set
# CONFIG_SND_SOC_AW8738 is not set
# CONFIG_SND_SOC_BD28623 is not set
CONFIG_SND_SOC_BT_SCO=y
CONFIG_SND_SOC_CROS_EC_CODEC=m
# CONFIG_SND_SOC_CS35L32 is not set
# CONFIG_SND_SOC_CS35L33 is not set
# CONFIG_SND_SOC_CS35L34 is not set
# CONFIG_SND_SOC_CS35L35 is not set
# CONFIG_SND_SOC_CS35L36 is not set
# CONFIG_SND_SOC_CS35L41_SPI is not set
# CONFIG_SND_SOC_CS35L41_I2C is not set
# CONFIG_SND_SOC_CS35L45_SPI is not set
# CONFIG_SND_SOC_CS35L45_I2C is not set
# CONFIG_SND_SOC_CS42L42 is not set
# CONFIG_SND_SOC_CS42L51_I2C is not set
# CONFIG_SND_SOC_CS42L52 is not set
# CONFIG_SND_SOC_CS42L56 is not set
# CONFIG_SND_SOC_CS42L73 is not set
# CONFIG_SND_SOC_CS42L83 is not set
# CONFIG_SND_SOC_CS4234 is not set
# CONFIG_SND_SOC_CS4265 is not set
# CONFIG_SND_SOC_CS4270 is not set
# CONFIG_SND_SOC_CS4271_I2C is not set
# CONFIG_SND_SOC_CS4271_SPI is not set
CONFIG_SND_SOC_CS42XX8=y
CONFIG_SND_SOC_CS42XX8_I2C=y
# CONFIG_SND_SOC_CS43130 is not set
# CONFIG_SND_SOC_CS4341 is not set
# CONFIG_SND_SOC_CS4349 is not set
# CONFIG_SND_SOC_CS53L30 is not set
# CONFIG_SND_SOC_CX2072X is not set
# CONFIG_SND_SOC_DA7213 is not set
CONFIG_SND_SOC_DMIC=m
CONFIG_SND_SOC_HDMI_CODEC=y
CONFIG_SND_SOC_ES7134=m
CONFIG_SND_SOC_ES7241=m
# CONFIG_SND_SOC_ES8316 is not set
# CONFIG_SND_SOC_ES8326 is not set
# CONFIG_SND_SOC_ES8328_I2C is not set
# CONFIG_SND_SOC_ES8328_SPI is not set
CONFIG_SND_SOC_GTM601=m
# CONFIG_SND_SOC_HDA is not set
# CONFIG_SND_SOC_ICS43432 is not set
# CONFIG_SND_SOC_INNO_RK3036 is not set
# CONFIG_SND_SOC_MAX98088 is not set
CONFIG_SND_SOC_MAX98357A=m
# CONFIG_SND_SOC_MAX98504 is not set
# CONFIG_SND_SOC_MAX9867 is not set
CONFIG_SND_SOC_MAX98927=m
# CONFIG_SND_SOC_MAX98520 is not set
# CONFIG_SND_SOC_MAX98373_I2C is not set
# CONFIG_SND_SOC_MAX98373_SDW is not set
# CONFIG_SND_SOC_MAX98390 is not set
# CONFIG_SND_SOC_MAX98396 is not set
# CONFIG_SND_SOC_MAX9860 is not set
CONFIG_SND_SOC_MSM8916_WCD_ANALOG=m
CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m
# CONFIG_SND_SOC_PCM1681 is not set
# CONFIG_SND_SOC_PCM1789_I2C is not set
# CONFIG_SND_SOC_PCM179X_I2C is not set
# CONFIG_SND_SOC_PCM179X_SPI is not set
CONFIG_SND_SOC_PCM186X=m
CONFIG_SND_SOC_PCM186X_I2C=m
# CONFIG_SND_SOC_PCM186X_SPI is not set
# CONFIG_SND_SOC_PCM3060_I2C is not set
# CONFIG_SND_SOC_PCM3060_SPI is not set
CONFIG_SND_SOC_PCM3168A=m
CONFIG_SND_SOC_PCM3168A_I2C=m
# CONFIG_SND_SOC_PCM3168A_SPI is not set
# CONFIG_SND_SOC_PCM5102A is not set
CONFIG_SND_SOC_PCM512x=m
CONFIG_SND_SOC_PCM512x_I2C=m
# CONFIG_SND_SOC_PCM512x_SPI is not set
# CONFIG_SND_SOC_RK3328 is not set
# CONFIG_SND_SOC_RK817 is not set
CONFIG_SND_SOC_RL6231=m
# CONFIG_SND_SOC_RT1308_SDW is not set
# CONFIG_SND_SOC_RT1316_SDW is not set
# CONFIG_SND_SOC_RT1318_SDW is not set
# CONFIG_SND_SOC_RT5616 is not set
# CONFIG_SND_SOC_RT5631 is not set
# CONFIG_SND_SOC_RT5640 is not set
CONFIG_SND_SOC_RT5659=m
# CONFIG_SND_SOC_RT5682_SDW is not set
# CONFIG_SND_SOC_RT700_SDW is not set
# CONFIG_SND_SOC_RT711_SDW is not set
# CONFIG_SND_SOC_RT711_SDCA_SDW is not set
# CONFIG_SND_SOC_RT715_SDW is not set
# CONFIG_SND_SOC_RT715_SDCA_SDW is not set
# CONFIG_SND_SOC_RT9120 is not set
CONFIG_SND_SOC_SGTL5000=m
CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
CONFIG_SND_SOC_SIMPLE_MUX=m
CONFIG_SND_SOC_SPDIF=m
# CONFIG_SND_SOC_SRC4XXX_I2C is not set
# CONFIG_SND_SOC_SSM2305 is not set
# CONFIG_SND_SOC_SSM2518 is not set
# CONFIG_SND_SOC_SSM2602_SPI is not set
# CONFIG_SND_SOC_SSM2602_I2C is not set
# CONFIG_SND_SOC_SSM4567 is not set
# CONFIG_SND_SOC_STA32X is not set
# CONFIG_SND_SOC_STA350 is not set
# CONFIG_SND_SOC_STI_SAS is not set
# CONFIG_SND_SOC_TAS2552 is not set
# CONFIG_SND_SOC_TAS2562 is not set
# CONFIG_SND_SOC_TAS2764 is not set
# CONFIG_SND_SOC_TAS2770 is not set
# CONFIG_SND_SOC_TAS2780 is not set
# CONFIG_SND_SOC_TAS5086 is not set
CONFIG_SND_SOC_TAS571X=m
# CONFIG_SND_SOC_TAS5720 is not set
# CONFIG_SND_SOC_TAS5805M is not set
# CONFIG_SND_SOC_TAS6424 is not set
# CONFIG_SND_SOC_TDA7419 is not set
# CONFIG_SND_SOC_TFA9879 is not set
# CONFIG_SND_SOC_TFA989X is not set
# CONFIG_SND_SOC_TLV320ADC3XXX is not set
# CONFIG_SND_SOC_TLV320AIC23_I2C is not set
# CONFIG_SND_SOC_TLV320AIC23_SPI is not set
CONFIG_SND_SOC_TLV320AIC31XX=m
# CONFIG_SND_SOC_TLV320AIC32X4_I2C is not set
# CONFIG_SND_SOC_TLV320AIC32X4_SPI is not set
# CONFIG_SND_SOC_TLV320AIC3X_I2C is not set
# CONFIG_SND_SOC_TLV320AIC3X_SPI is not set
# CONFIG_SND_SOC_TLV320ADCX140 is not set
# CONFIG_SND_SOC_TS3A227E is not set
# CONFIG_SND_SOC_TSCS42XX is not set
# CONFIG_SND_SOC_TSCS454 is not set
# CONFIG_SND_SOC_UDA1334 is not set
# CONFIG_SND_SOC_WCD9335 is not set
CONFIG_SND_SOC_WCD_MBHC=m
CONFIG_SND_SOC_WCD934X=m
# CONFIG_SND_SOC_WCD938X_SDW is not set
# CONFIG_SND_SOC_WM8510 is not set
# CONFIG_SND_SOC_WM8523 is not set
CONFIG_SND_SOC_WM8524=y
# CONFIG_SND_SOC_WM8580 is not set
# CONFIG_SND_SOC_WM8711 is not set
# CONFIG_SND_SOC_WM8728 is not set
# CONFIG_SND_SOC_WM8731_I2C is not set
# CONFIG_SND_SOC_WM8731_SPI is not set
# CONFIG_SND_SOC_WM8737 is not set
# CONFIG_SND_SOC_WM8741 is not set
# CONFIG_SND_SOC_WM8750 is not set
# CONFIG_SND_SOC_WM8753 is not set
# CONFIG_SND_SOC_WM8770 is not set
# CONFIG_SND_SOC_WM8776 is not set
# CONFIG_SND_SOC_WM8782 is not set
# CONFIG_SND_SOC_WM8804_I2C is not set
# CONFIG_SND_SOC_WM8804_SPI is not set
# CONFIG_SND_SOC_WM8903 is not set
CONFIG_SND_SOC_WM8904=m
# CONFIG_SND_SOC_WM8940 is not set
CONFIG_SND_SOC_WM8960=m
CONFIG_SND_SOC_WM8962=m
# CONFIG_SND_SOC_WM8974 is not set
# CONFIG_SND_SOC_WM8978 is not set
# CONFIG_SND_SOC_WM8985 is not set
CONFIG_SND_SOC_WM8994=m
CONFIG_SND_SOC_WSA881X=m
# CONFIG_SND_SOC_WSA883X is not set
# CONFIG_SND_SOC_ZL38060 is not set
CONFIG_SND_SOC_RPMSG_WM8960=m
CONFIG_SND_SOC_RPMSG_WM8960_I2C=m
CONFIG_SND_SOC_RPMSG_AK4497=m
# CONFIG_SND_SOC_MAX9759 is not set
# CONFIG_SND_SOC_MT6351 is not set
# CONFIG_SND_SOC_MT6358 is not set
# CONFIG_SND_SOC_MT6660 is not set
# CONFIG_SND_SOC_NAU8315 is not set
# CONFIG_SND_SOC_NAU8540 is not set
# CONFIG_SND_SOC_NAU8810 is not set
# CONFIG_SND_SOC_NAU8821 is not set
# CONFIG_SND_SOC_NAU8822 is not set
# CONFIG_SND_SOC_NAU8824 is not set
CONFIG_SND_SOC_TPA6130A2=m
CONFIG_SND_SOC_LPASS_MACRO_COMMON=m
CONFIG_SND_SOC_LPASS_WSA_MACRO=m
CONFIG_SND_SOC_LPASS_VA_MACRO=m
# CONFIG_SND_SOC_LPASS_RX_MACRO is not set
# CONFIG_SND_SOC_LPASS_TX_MACRO is not set
CONFIG_SND_SIMPLE_CARD_UTILS=y
CONFIG_SND_SIMPLE_CARD=y
CONFIG_SND_AUDIO_GRAPH_CARD=y
# CONFIG_SND_AUDIO_GRAPH_CARD2 is not set
# CONFIG_SND_TEST_COMPONENT is not set
# CONFIG_SND_XEN_FRONTEND is not set
# CONFIG_SND_VIRTIO is not set
CONFIG_SOUNDWIRE=m
# SoundWire Devices
# CONFIG_SOUNDWIRE_INTEL is not set
CONFIG_SOUNDWIRE_QCOM=m
And these are the relevant portions of my device tree
dummy_dai: dummy-dai {
compatible = "linux,snd-soc-dummy";
#sound-dai-cells = <0>;
status = "okay";
};
sound-header {
compatible = "simple-audio-card";
status = "okay";
simple-audio-card,name = "40-pin Header";
simple-audio-card,format = "i2s";
simple-audio-card,cpu {
sound-dai = <&sai1>;
};
simple-audio-card,codec {
#sound-dai-cells = <0>;
sound-dai = <&dummy_dai>;
};
};
soc@0 {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
ranges = <0x0 0x0 0x0 0x3e000000>;
dma-ranges = <0x40000000 0x0 0x40000000 0xc0000000>;
nvmem-cells = <&imx8mq_uid>;
nvmem-cell-names = "soc_unique_id";
caam_sm: caam-sm@100000 {
compatible = "fsl,imx6q-caam-sm";
reg = <0x100000 0x8000>;
};
bus@30000000 { /* AIPS1 */
compatible = "fsl,aips-bus", "simple-bus";
reg = <0x30000000 0x400000>;
#address-cells = <1>;
#size-cells = <1>;
ranges = <0x30000000 0x30000000 0x400000>;
sai1: sai@30010000 {
#sound-dai-cells = <0>;
compatible = "fsl,imx8mq-sai",
"fsl,imx6sx-sai";
reg = <0x30010000 0x10000>;
interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clk IMX8MQ_CLK_SAI1_IPG>,
<&clk IMX8MQ_CLK_DUMMY>,
<&clk IMX8MQ_CLK_SAI1_ROOT>,
<&clk IMX8MQ_CLK_DUMMY>, <&clk IMX8MQ_CLK_DUMMY>;
clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3";
dmas = <&sdma2 8 1 0>, <&sdma2 9 1 0>;
dma-names = "rx", "tx";
fsl,dataline = <0 0xff 0xff>;
status = "disabled";
};
&sai1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sai1>;
status = "okay";
#sound-dai-cells = <0>;
assigned-clocks =
<&clk IMX8MQ_CLK_SAI1>;
assigned-clock-parents = <&clk IMX8MQ_AUDIO_PLL1_OUT>;
assigned-clock-rates = <45158400>;
clocks = <&clk IMX8MQ_CLK_SAI1_IPG>, <&clk IMX8MQ_CLK_DUMMY>,
<&clk IMX8MQ_CLK_SAI1_ROOT>, <&clk IMX8MQ_CLK_DUMMY>,
<&clk IMX8MQ_CLK_DUMMY>, <&clk IMX8MQ_AUDIO_PLL1_OUT>,
<&clk IMX8MQ_AUDIO_PLL2_OUT>;
clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3", "pll8k", "pll11k";
};
Hi, I am using WSL 2 and I am trying to using a St-link to debug a Cube Orange Plus+ flight controller which is STM32 based. I have tried many different things but the main error I am running into is:
2024-10-10T11:26:55 ERROR gdb-server.c: Unsupported Target (Chip ID is 0000000000, Core ID is 0000000000).
I've tried pure terminal as well as vscode. When I use terminal I get the following output:
cunix $ st-util
st-util 1.8.0-60-g5280bcf
Failed to enter SWD mode
2024-10-10T11:22:47 ERROR gdb-server.c: Unsupported Target (Chip ID is 0000000000, Core ID is 0000000000).
cunix $ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 0483:3754 STMicroelectronics STLINK-V3
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
cunix $ st-util
st-util 1.8.0-60-g5280bcf
Failed to enter SWD mode
2024-10-10T11:26:55 ERROR gdb-server.c: Unsupported Target (Chip ID is 0000000000, Core ID is 0000000000).
when I use vscode with the launch.json file seen below I get the following output in the debug console and terminal.
Code:
{
"name": "stlink (cubepilot_cubeorange)",
"gdbPath": "/opt/arm-toolchain/arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-gdb",
"device": "STM32H757ZI",
"svdFile": "",
"executable": "${command:cmake.launchTargetPath}",
"request": "launch",
"type": "cortex-debug",
"servertype": "stutil",
"cwd": "${workspaceFolder}",
"internalConsoleOptions": "openOnSessionStart",
"preLaunchCommands": [
"source ${workspaceFolder}/platforms/nuttx/Debug/PX4",
"source ${workspaceFolder}/platforms/nuttx/Debug/NuttX",
"source ${workspaceFolder}/platforms/nuttx/Debug/ARMv7M",
"set mem inaccessible-by-default off",
"set print pretty",
]
},
Debug Console:
Cortex-Debug: VSCode debugger extension version 1.12.1 git(652d042). Usage info: https://github.com/Marus/cortex-debug#usageReading symbols from /opt/arm-toolchain/arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-objdump --syms -C -h -w /home/conorunix/PX4-Autopilot/build/cubepilot_cubeorange_test/cubepilot_cubeorange_test.elf
Reading symbols from /opt/arm-toolchain/arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-nm --defined-only -S -l -C -p /home/conorunix/PX4-Autopilot/build/cubepilot_cubeorange_test/cubepilot_cubeorange_test.elf
Launching GDB: /opt/arm-toolchain/arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-gdb -q --interpreter=mi2
IMPORTANT: Set "showDevDebugOutput": "raw" in "launch.json" to see verbose GDB transactions here. Very helpful to debug issues or report problems
Launching gdb-server: st-util -p 50000 --no-reset
Please check TERMINAL tab (gdb-server) for output from st-util
ST-Util: GDB Server Quit Unexpectedly. See gdb-server output in TERMINAL tab for more details.
Terminal:
[2024-10-10T14:54:31.220Z] SERVER CONSOLE DEBUG: onBackendConnect: gdb-server session connected. You can switch to "DEBUG CONSOLE" to see GDB interactions.
st-util -p 50000 --no-reset
st-util 1.8.0-60-g5280bcf
Failed to enter SWD mode
2024-10-10T10:54:31 ERROR gdb-server.c: Unsupported Target (Chip ID is 0000000000, Core ID is 0000000000).
[2024-10-10T14:54:31.289Z] SERVER CONSOLE DEBUG: onBackendConnect: gdb-server session closed
GDB server session ended.
I have updated my firmware of my St-link but that didn't change anything. I have also tried to connect to it via STM32CubeIDE but I cannot find the STM32H753 chip in the program.
If anyone has any ideas or solutions help would be greatly appreciated!
Hello everyone. Hope you all are doing good in your life. I’m working with the embedded kernel team and there’s this issue we’re(embedded team) facing from quite some time and unable to resolve it. So please bear with me and share your solutions/insights on resolving this bug. The thing is slab memory allocator is taking more memory than it should and that’s affecting other kernel processes that we’re working on. So if you know the changes that should be made in the code to either restrict the slab memory to a limit or move from slab to slub memory allocator. Please share the detailed steps or resources to follow. Some extra info- I’m in telecom industry, the updated kernel is converted to image and that image is moved on the hardware. The distro is Ubuntu. Please let me know if I’m missing any details. Thanks In advance.
So dealing with a dead / bricked UDM-Pro I have found recently, the device does not seemgly respond to attemtps to get it into recovery mode via the reset button method.
I can get into the U-Boot console and I wanted to get some eyes on it as a recovery of this level has not been done as far as I can see.
The UDM-Pro is connected to my latop of a TTL-USB device as there is an internal Serial connector.
Now my issue is Ubiquiti wants you to use TFTP to recover the device, I can't get the networking to start up, it sees on the PCI device list, but when I issue commands it kicks off the reboot loop once more
Any extra advice would be great and if I can get the networking to work it should be chance at recovery.
If I can get the networking online there is a good chance I can get the TFTP recovery kicked off
Hello,
I am trying to learn linux and embedded linux programming and I am playing with my newly arrived BBB.
After reading a bit I am trying to do a simple startup exercise by trying to control an LED by writing into /sys/class/gpio/gpiox/value ‘file’.
I have connected an LED and a resistor on pin #3 of P8 connector of my BBB.
According to the BBB usermanual pin#3 of P8 connector is gpio1_6 so, as I understand it the number of this GPIO in software(in the /sys/class/gpio folder should be 38: 1x32 + 6).
So I assumed this pin should be controlled by writing into the file located at /sys/class/gpio/gpio38/value
This is the output from the terminal(I am checking to see if the pin is configured as output then I am trying to write 1 and 0 into the value file to control the LED):
debian@BeagleBone:/sys/class/gpio/gpio38$ cat direction
out
debian@BeagleBone:/sys/class/gpio/gpio38$ echo 1 > value
debian@BeagleBone:/sys/class/gpio/gpio38$ cat value
1
debian@BeagleBone:/sys/class/gpio/gpio38$ echo 0 > value
debian@BeagleBone:/sys/class/gpio/gpio38$ cat value
0
debian@BeagleBone:/sys/class/gpio/gpio38$
From what I can tell everything fine here. However my LED stays on no matter what I do.
This is how I connected the LED on the board:
The green wire is connected on pin3 of P8 which I am trying to control as an output. Then goes into the resistor then into the anode of the Led. The white wire is connected on pin 2 of BBB which should be GND if I understood the schematic correctly and that goes into the anode of the LED.
Please help me understand why the LED is not being controlled as I expected.
Considering the hw wirings are correct, I am assuming I have done a mistake when trying to identify the number the kernel uses to refer to this pin? So when I am writing to pin 38 am not actually controlling gpio1[6] as I expected?
I assume that is the mistake but from what I understood from the materials I’ve read gpio1[6] should be 1x32+6 in software=38.
Please help me understand where I am wrong. Thank you!
Edit: I think P8_3 of BBB is used by the mmc by default. I have switched to using P8_11(GPIO1_13) and now everything works fine.
I am building a recipe from meta-ti, that is basically the linux kernel. The recipe is called ti-linux-staging and I pulled it down from their site directly.
When the recipe get to the 'do_package' stage it fails:
ERROR: linux-ti-staging-6.6.44+git-r0 do_package: QA Issue: linux-ti-staging: Files/directories were installed but not shipped in any package:
/boot/dtb
I'm not sure how to resolve this. I replaced this with a different recipe from 6.1.46 that worked fine.
The original (working) version was based on meta-ti as well and they didn't make any changes except to pull their own git repository source code.
Any ideas what I can do?
Hello, I am trying to create a very simple project to become familiar with the Zynq UltraScale+ MPSoC platform. I have the KV260 starter kit, and I have created a simple block diagram in Vivado. It just has an AXI BRAM controller. I am using Vivado/Vitis/Petalinux 2023.2. Here is the block diagram that I created:
From here, I exported the hardware XSA, and generated a petalinux build following this guide:
https://xilinx.github.io/kria-apps-docs/kv260/2021.1/build/html/docs/build_petalinux.html
Except substituting the 2021 BSP for the 2023 BSP. This went smoothly, and the build boots normally and as expected.
I then imported the XSA into the petalinux project following this guide:
Then followed this guide to configure u-boot:
https://docs.amd.com/r/en-US/ug1144-petalinux-tools-reference-guide/Configuring-U-Boot
Finally, I followed this guide to add the AXI BRAM memory bank to the device tree:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842412/Accessing+BRAM+In+Linux
However this is where I ran into my first issue. When I tried to re-configure u-boot at this step, it wasn't able to find the label axi_bram_ctrl_0. My pl.dtsi looks like this:
/*
* CAUTION: This file is automatically generated by Xilinx.
* Version: XSCT
* Today is: Fri Sep 27 21:20:56 2024
*/
/dts-v1/;
/plugin/;
&fpga_full {
firmware-name = "design_1_wrapper.bit.bin";
resets = <&zynqmp_reset 116>;
};
&amba {
#address-cells = <2>;
#size-cells = <2>;
afi0: afi0 {
compatible = "xlnx,afi-fpga";
config-afi = < 0 0>, <1 0>, <2 0>, <3 0>, <4 0>, <5 0>, <6 0>, <7 0>, <8 0>, <9 0>, <10 0>, <11 0>, <12 0>, <13 0>, <14 0xa00>, <15 0x200>;
};
clocking0: clocking0 {
#clock-cells = <0>;
assigned-clock-rates = <96968727>;
assigned-clocks = <&zynqmp_clk 71>;
clock-output-names = "fabric_clk";
clocks = <&zynqmp_clk 71>;
compatible = "xlnx,fclk";
};
clocking1: clocking1 {
#clock-cells = <0>;
assigned-clock-rates = <96968727>;
assigned-clocks = <&zynqmp_clk 72>;
clock-output-names = "fabric_clk";
clocks = <&zynqmp_clk 72>;
compatible = "xlnx,fclk";
};
axi_bram_ctrl_0: axi_bram_ctrl@a0000000 {
clock-names = "s_axi_aclk";
clocks = <&zynqmp_clk 71>;
compatible = "xlnx,axi-bram-ctrl-4.1";
reg = <0x0 0xa0000000 0x0 0x2000>;
xlnx,bram-addr-width = <0xb>;
xlnx,bram-inst-mode = "EXTERNAL";
xlnx,ecc = <0x0>;
xlnx,ecc-onoff-reset-value = <0x0>;
xlnx,ecc-type = <0x0>;
xlnx,fault-inject = <0x0>;
xlnx,memory-depth = <0x800>;
xlnx,rd-cmd-optimization = <0x0>;
xlnx,read-latency = <0x1>;
xlnx,s-axi-ctrl-addr-width = <0x20>;
xlnx,s-axi-ctrl-data-width = <0x20>;
xlnx,s-axi-id-width = <0x1>;
xlnx,s-axi-supports-narrow-burst = <0x1>;
xlnx,single-port-bram = <0x1>;
};
};
And I edited the system-user.dtsi to match what was in the BRAM configuration wiki page.
If I include pl.dtsi in my system-user.dtsi I can an error about not being able to parse the device tree rather than being unable to find the axi_bram_ctrl_0 label. It seems this stems from the /plugin/; or /dts-v1/; lines at the top of the pl.dtsi. I "remedied" the error by copying the block &amba into the system-user.dtsi, and it configured without an issue. I'm certain that this is incorrect, and possibly the cause of my further issue. For reference, this is what my system-user.dtsi looks like:
/include/ "system-conf.dtsi"
/ {
#address-cells = <2>;
#size-cells = <2>;
memory {
device_type = "memory";
reg = <0x0 0x0 0x0 0x80000000>, <0x0 0xA0000000 0x0 0x2000>, <0x00000008 0x00000000 0x0 0x80000000>;
};
reserved-memory {
ranges;
reserved {
reg = <0x0 0xa0000000 0x0 0x2000>;
};
};
};
&amba {
#address-cells = <2>;
#size-cells = <2>;
afi0: afi0 {
compatible = "xlnx,afi-fpga";
config-afi = < 0 0>, <1 0>, <2 0>, <3 0>, <4 0>, <5 0>, <6 0>, <7 0>, <8 0>, <9 0>, <10 0>, <11 0>, <12 0>, <13 0>, <14 0xa00>, <15 0x200>;
};
clocking0: clocking0 {
#clock-cells = <0>;
assigned-clock-rates = <96968727>;
assigned-clocks = <&zynqmp_clk 71>;
clock-output-names = "fabric_clk";
clocks = <&zynqmp_clk 71>;
compatible = "xlnx,fclk";
};
clocking1: clocking1 {
#clock-cells = <0>;
assigned-clock-rates = <96968727>;
assigned-clocks = <&zynqmp_clk 72>;
clock-output-names = "fabric_clk";
clocks = <&zynqmp_clk 72>;
compatible = "xlnx,fclk";
};
axi_bram_ctrl_0: axi_bram_ctrl@a0000000 {
clock-names = "s_axi_aclk";
clocks = <&zynqmp_clk 71>;
compatible = "xlnx,axi-bram-ctrl-4.1";
reg = <0x0 0xa0000000 0x0 0x2000>;
xlnx,bram-addr-width = <0xb>;
xlnx,bram-inst-mode = "EXTERNAL";
xlnx,ecc = <0x0>;
xlnx,ecc-onoff-reset-value = <0x0>;
xlnx,ecc-type = <0x0>;
xlnx,fault-inject = <0x0>;
xlnx,memory-depth = <0x800>;
xlnx,rd-cmd-optimization = <0x0>;
xlnx,read-latency = <0x1>;
xlnx,s-axi-ctrl-addr-width = <0x20>;
xlnx,s-axi-ctrl-data-width = <0x20>;
xlnx,s-axi-id-width = <0x1>;
xlnx,s-axi-supports-narrow-burst = <0x1>;
xlnx,single-port-bram = <0x1>;
};
};
&axi_bram_ctrl_0 {
status = "disabled";
};
Finally, after reconfiguring, I take the resulitng BOOT.BIN and load it onto the SoM by using the command:
xmutil bootfw_update -i BOOT.BIN
And then reboot. From here, I pause the startup of u-boot and execute the "bd" command and expect to see 3 DRAM banks configured, as per the BRAM configuration guide, but I still only see two. I know for a fact I'm missing something, or doing something wrong, but I'm uncertain what. Any pointers in the right direction would be greatly appreciated.
Thank you
I’d love to hear from you about your experiences with Yocto! If you’re facing any challenges or have questions, please drop them in the comments below.
To get the conversation started, here are some common questions I’ve come across from fellow users:
* What is with all these strange names for Yocto relases - Kirkstone, Scarthgap, etc?
* I have built an image and installed it on my target. Can I add more things to it without having to to-flash the entire board?
* I have inherited a system from someone else. I found that I had to change a file on the board to make some changes. I have searched through all the recipes but cannot see where the original file is for me to make the changes in the build.
* I need to change some of the configuration parameters of the kernel, how do I do it?
* I am getting errors when I am building a recipe. How can I debug it?
* How can I specify the partitions of the SD card image that gets built by Yocto?
* I added OpenCV to my system, but I am getting AttributeError: module 'cv2' has no attribute 'dnn' when I try to run my code.
We’re gearing up for an AMA and want to cover all aspects of Yocto, so your input is super valuable!
Feel free to reply to this post with any Yocto questions or issues you’re facing. I can’t wait to hear from you!
Good day everyone,
I have built a linux image for a board I have (lichee pi zero) with buildroot. The boot time is around 4 seconds and I want to shave at least a second off it.
The problem is, I don't know where to start. I have included the dmesg logs while booting below. The biggest time waster is the RTL8723BS wifi driver, which is loaded at 2.01s and takes until 3.96s to finish configuring the device, but I don't know anything about wifi and therefore I'm too afraid to touch the driver. Is there anything else in the kernel I can turn off, or other tricks I can do to reduce the boot time? Thanks for your time
Update: This is how I reduced the kernel boot by one second:
Thanks to anyone who helped
U-Boot SPL 2022.01 (Sep 24 2024 - 16:55:10 +0100)
DRAM: 64 MiB
Trying to boot from MMC1
U-Boot 2022.01 (Sep 24 2024 - 16:55:10 +0100) Allwinner Technology
CPU: Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM: 64 MiB
WDT: Not starting watchdog@1c20ca0
MMC: mmc@1c0f000: 0
Loading Environment from FAT... Unable to read "uboot.env" from mmc0:1... In: serial@1c28000
Out: serial@1c28000
Err: serial@1c28000
Net: No ethernet found.
Hit any key to stop autoboot: 0
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
292 bytes read in 0 ms
## Executing script at 41900000
4290688 bytes read in 216 ms (18.9 MiB/s)
9473 bytes read in 2 ms (4.5 MiB/s)
Kernel image @ 0x41000000 [ 0x000000 - 0x417880 ]
## Flattened Device Tree blob at 41800000
Booting using the fdt blob at 0x41800000
Loading Device Tree to 42dfa000, end 42dff500 ... OK
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 5.4.217 (jamie@laptop) (gcc version 12.4.0 (Buildroot 2024.02.6)) #15 SMP Sat Sep 28 01:19:50 +0100 2024
[ 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: Lichee Pi Zero with Dock
[ 0.000000] Memory policy: Data cache writealloc
[ 0.000000] cma: Reserved 16 MiB at 0x41c00000
[ 0.000000] psci: probing for conduit method from DT.
[ 0.000000] psci: Using PSCI v0.1 Function IDs from DT
[ 0.000000] percpu: Embedded 15 pages/cpu s30732 r8192 d22516 u61440
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 16256
[ 0.000000] Kernel command line: console=ttyS0,115200 panic=5 console=tty0 rootwait root=/dev/mmcblk0p2 earlyprintk rw
[ 0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes, linear)
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] Memory: 37488K/65536K available (7168K kernel code, 433K rwdata, 1688K rodata, 1024K init, 241K bss, 11664K reserved, 16384K cma-reserved, 0K highmem)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] rcu: Hierarchical RCU implementation.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=1.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[ 0.000000] GIC: Using split EOI/Deactivate mode
[ 0.000000] arch_timer: cp15 timer(s) running at 24.00MHz (phys).
[ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[ 0.000008] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
[ 0.000021] Switching to timer-based delay loop, resolution 41ns
[ 0.000226] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[ 0.000565] Console: colour dummy device 80x30
[ 0.000841] printk: console [tty0] enabled
[ 0.000897] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000)
[ 0.000928] pid_max: default: 32768 minimum: 301
[ 0.001102] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.001130] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.001987] CPU: Testing write buffer coherency: ok
[ 0.002628] /cpus/cpu@0 missing clock-frequency property
[ 0.002677] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[ 0.003616] Setting up static identity map for 0x40100000 - 0x40100060
[ 0.003901] rcu: Hierarchical SRCU implementation.
[ 0.004537] smp: Bringing up secondary CPUs ...
[ 0.004579] smp: Brought up 1 node, 1 CPU
[ 0.004595] SMP: Total of 1 processors activated (48.00 BogoMIPS).
[ 0.004609] CPU: All CPU(s) started in HYP mode.
[ 0.004620] CPU: Virtualization extensions available.
[ 0.005336] devtmpfs: initialized
[ 0.008324] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5
[ 0.008669] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[ 0.008721] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
[ 0.009474] pinctrl core: initialized pinctrl subsystem
[ 0.011304] NET: Registered protocol family 16
[ 0.012428] DMA: preallocated 256 KiB pool for atomic coherent allocations
[ 0.013606] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.
[ 0.013652] hw-breakpoint: maximum watchpoint size is 8 bytes.
[ 0.028060] SCSI subsystem initialized
[ 0.028336] usbcore: registered new interface driver usbfs
[ 0.028429] usbcore: registered new interface driver hub
[ 0.028505] usbcore: registered new device driver usb
[ 0.028701] videodev: Linux video capture interface: v2.00
[ 0.028778] pps_core: LinuxPPS API ver. 1 registered
[ 0.028793] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 0.028826] PTP clock support registered
[ 0.030446] clocksource: Switched to clocksource arch_sys_counter
[ 0.041694] thermal_sys: Registered thermal governor 'step_wise'
[ 0.042065] NET: Registered protocol family 2
[ 0.042390] IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear)
[ 0.042922] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes, linear)
[ 0.042992] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.043030] TCP bind hash table entries: 1024 (order: 1, 8192 bytes, linear)
[ 0.043062] TCP: Hash tables configured (established 1024 bind 1024)
[ 0.043220] UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
[ 0.043283] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
[ 0.043555] NET: Registered protocol family 1
[ 0.044588] RPC: Registered named UNIX socket transport module.
[ 0.044634] RPC: Registered udp transport module.
[ 0.044649] RPC: Registered tcp transport module.
[ 0.044661] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.046812] Initialise system trusted keyrings
[ 0.047325] workingset: timestamp_bits=30 max_order=14 bucket_order=0
[ 0.055416] NFS: Registering the id_resolver key type
[ 0.055535] Key type id_resolver registered
[ 0.055551] Key type id_legacy registered
[ 0.055628] Key type asymmetric registered
[ 0.055646] Asymmetric key parser 'x509' registered
[ 0.055718] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 249)
[ 0.055744] io scheduler mq-deadline registered
[ 0.055757] io scheduler kyber registered
[ 0.061076] sun8i-v3s-pinctrl 1c20800.pinctrl: initialized sunXi PIO driver
[ 0.128417] Serial: 8250/16550 driver, 8 ports, IRQ sharing disabled
[ 0.130923] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pb not found, using dummy regulator
[ 0.131998] printk: console [ttyS0] disabled
[ 0.152313] 1c28000.serial: ttyS0 at MMIO 0x1c28000 (irq = 33, base_baud = 1500000) is a U6_16550A
[ 0.725008] printk: console [ttyS0] enabled
[ 0.752471] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.759035] ehci-platform: EHCI generic platform driver
[ 0.764658] ehci-platform 1c1a000.usb: EHCI Host Controller
[ 0.770289] ehci-platform 1c1a000.usb: new USB bus registered, assigned bus number 1
[ 0.778440] ehci-platform 1c1a000.usb: irq 34, io mem 0x01c1a000
[ 0.810428] ehci-platform 1c1a000.usb: USB 2.0 started, EHCI 1.00
[ 0.817689] hub 1-0:1.0: USB hub found
[ 0.821675] hub 1-0:1.0: 1 port detected
[ 0.826214] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 0.832550] ohci-platform: OHCI generic platform driver
[ 0.838150] ohci-platform 1c1a400.usb: Generic Platform OHCI controller
[ 0.844900] ohci-platform 1c1a400.usb: new USB bus registered, assigned bus number 2
[ 0.855483] ohci-platform 1c1a400.usb: irq 35, io mem 0x01c1a400
[ 0.935503] hub 2-0:1.0: USB hub found
[ 0.939383] hub 2-0:1.0: 1 port detected
[ 0.944508] usb_phy_generic usb_phy_generic.0.auto: usb_phy_generic.0.auto supply vcc not found, using dummy regulator
[ 0.956169] musb-hdrc musb-hdrc.1.auto: MUSB HDRC host driver
[ 0.962079] musb-hdrc musb-hdrc.1.auto: new USB bus registered, assigned bus number 3
[ 0.971783] hub 3-0:1.0: USB hub found
[ 0.975641] hub 3-0:1.0: 1 port detected
[ 0.981297] usbcore: registered new interface driver uvcvideo
[ 0.987077] USB Video Class driver (1.1.1)
[ 0.992490] sunxi-wdt 1c20ca0.watchdog: Watchdog enabled (timeout=16 sec, nowayout=0)
[ 1.001212] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pf not found, using dummy regulator
[ 1.037806] sunxi-mmc 1c0f000.mmc: initialized, max. request size: 16384 KB
[ 1.045140] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pg not found, using dummy regulator
[ 1.080014] sunxi-mmc 1c10000.mmc: initialized, max. request size: 16384 KB
[ 1.088140] usbcore: registered new interface driver usbhid
[ 1.093844] usbhid: USB HID core driver
[ 1.098225] NET: Registered protocol family 17
[ 1.102948] Key type dns_resolver registered
[ 1.107326] Registering SWP/SWPB emulation handler
[ 1.113442] Loading compiled-in X.509 certificates
[ 1.125059] mmc0: host does not support reading read-only switch, assuming write-enable
[ 1.133695] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[ 1.142328] mmc0: new high speed SDHC card at address 2151
[ 1.149995] mmcblk0: mmc0:2151 APPSD 7.50 GiB
[ 1.157263] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[ 1.164379] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[ 1.173120] cfg80211: failed to load regulatory.db
[ 1.180758] mmcblk0: p1 p2
[ 1.195854] mmc1: new high speed SDIO card at address 0001
[ 1.258148] EXT4-fs (mmcblk0p2): recovery complete
[ 1.263306] usb 1-1: new high-speed USB device number 2 using ehci-platform
[ 1.272168] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[ 1.280487] VFS: Mounted root (ext4 filesystem) on device 179:2.
[ 1.287357] devtmpfs: mounted
[ 1.291924] Freeing unused kernel memory: 1024K
[ 1.296644] Run /sbin/init as init process
[ 1.398460] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[ 1.483497] uvcvideo: Found UVC 1.00 device supereyes (eb1a:299f)
[ 1.492375] uvcvideo: Failed to query (GET_INFO) UVC control 3 on unit 1: -32 (exp. 1).
[ 1.531869] input: supereyes: supereyes as /devices/platform/soc/1c1a000.usb/usb1/1-1/1-1:1.0/input/input0
[ 1.662795] random: dd: uninitialized urandom read (32 bytes read)
[ 2.018840] r8723bs: module is from the staging directory, the quality is unknown, you have been warned.
[ 2.045650] RTL8723BS: module init start
[ 2.049625] RTL8723BS: rtl8723bs v4.3.5.5_12290.20140916_BTCOEX20140507-4E40
[ 2.056796] RTL8723BS: rtl8723bs BT-Coex version = BTCOEX20140507-4E40
[ 2.064629] pnetdev = (ptrval)
[ 2.098869] RTL8723BS: rtw_ndev_init(wlan0)
[ 2.104545] RTL8723BS: module init ret =0
[ 2.141535] random: dnsmasq: uninitialized urandom read (128 bytes read)
[ 2.148506] random: dnsmasq: uninitialized urandom read (48 bytes read)
[ 2.291180] rtl8723bs: acquire FW from file:rtlwifi/rtl8723bs_nic.bin
[ 2.550638] random: crng init done
[ 2.554085] random: 1 urandom warning(s) missed due to ratelimiting
[ 3.923849] RTL8723BS: rtw_cmd_thread(wlan0) pcmd->sctx
[ 3.929193] RTL8723BS: assoc success
[ 3.945812] RTL8723BS: set group key camid:1, addr:00:00:00:00:00:00, kid:1, type:TKIP
Welcome to Buildroot for the LicheePi Zero
Is there any builtin mechanism for controlling access to iiod over network? I cant seem to find anything about that. For example, if i have a linux device on the network is seems like anybody can access the devices IIOD is providing/exposing.
Was wondering if there was a way to apply username/password or pam authentication or similar.?
thanks
Hi I'm working with an industrial Board from Sierra Wireless called FX30S, and IoT expansion card -a plugable pcb standard from Sierra Wireless) and the Legato Application Framework for Linux. Basically the FX30S doesn't have exposed gpios, nor spi, nor i2c so if you want those you need the IoT expansion card ( https://www.renfell.com/mangoh ) I'm using spi. The problem however is I'm getting glitches on the clock signal which is no good.
From the FX30S board I load a kernel module which exposes /dev/spidev1.0 which then I use some Legato functions ( https://docs.legato.io/latest/legatoServices.html ) on to configure the spi and that's it. I know not much around linux drivers but I would like to know how can I approach the problem to solve it, I can also try spi but I would have to write my own i2c drivers which I'm not familiar with.
Here is the glitch captured from a logic analyzer:
It is random appearing on different sent frames, the equivalent code in Arduino does the job just fine with the signal being equivalent outside the clock glitch
I want to receive HDMI in my system (based on NXP i.MX 8M), but there is no way to receive HDMI by the chip itself, I need to convert video to MIPI-CSI2 then feed it to the system.
I found multiple board (chips) like Geekworm C790 based on (Toshiba TC358743XBG) chip and Firefly HDMI TO MIPI CSI based on (Rockchip RK628D) chip.
My questions:
Finally, I come from FPGA, Bare-meta and RTOS background and just start learning about development in Linux, are there good tutorials or materials to learn about video stack (receiving, handling, displaying, processing) in Linux?
Hello,
Novice here , hoping to get support from the raspberry pi community. I am running OrangePI with "Orangepi5plus_1.0.6_debian_bookworm_desktop_xfce_linux5.10.110". The reason for using OrangePI is that it can drive my display that expects DP output. RaspberryPI will not work. I have an odd screen resolution of 720x1920 (not 1920x720). The orangePI drives this display but the screen is rotated. The Orientation does not change from when tried from Arandr UI, The error " XRandR failed: XRandR returned error code 1:b'xrandr: Configure crtc failed\n'"
I am trying to change the orientation using the below commands.
-- # 720x1920 59.93 Hz (CVT) hsync: 119.20 kHz; pclk: 118.25 MHz Modeline "720x1920_60.00" 118.25 720 784 856 992 1920 1923 1933 1989 -hsync +vsync
sudo xrandr --newmode "720x1920_60.00" 118.25 720 784 856 992 1920 1923 1933 1989 -hsync +vsync sudo xrandr --addmode DP-1 720x1920_60.00 xrandr --output DP-1 --mode "720x1920_60.00"
Here the screen goes blank. The screen restores back when i select the default resolution
We are working on a new generation of an existing product that uses a Xilinx (FPGA +CPU) part running embedded Linux. Our AI team has basically given us the requirement to put an Nvidia Orin module on the next generation of the board for some neural network. The actual board level connection isn't ironed out yet but it will effectively be two SOMs on the board, both running Linux. From a software perspective this seems like a nightmare to maintain two Linux builds + communication. My initial suggestion was to connect a GPU to our FPGA SOM's PCIE. The pushback is that adding a GPU IC is a lot of work from a schematic/layout perspective and the Nvidia SOM is plug and play from a hardware design perspective, and I guess they like the SDK that comes with the Orin and already have some preliminary AI models working.
I have done something similar in the past with a micro-controller that had a networking co-processor (esp32) running a stock image provided by the manufacturer. We didn't have to maintain the software we just communicated with the esp32 over a UART port with a predefined protocol.
Has anyone done something like this before with two Linux SOMs?
Could we just use the stock (Linux for Tegra) Nvidia provides and not worry about another yocto project for the Nvidia SOM?
Are there any small form factor GPUs that interface over PCIE? Everything I can find is either too large (Desktop sized blower GPUs) or its a single board computer like the Nvidia Jetson lineup. We don't have any mechanical size constraints yet but my guess is the GPU/SOM needs to be around the size of an index card and support fanless operation.
Hi,
I’m interested in the embedded Linux development process. I’ve written some user-level Python code and drivers, but debugging can sometimes be quite painful.
Currently, I’m using a Raspberry Pi Zero W 2 with a remote connection via VS Code over the internet. It works satisfactorily, but sometimes it’s slow, and the connection drops occasionally. The speed issues make it difficult to navigate between files or use features like code completion and definition jumping in VS Code because it running directly on the target device.
I’d like to improve this process, particularly for situations where the device might not have an internet connection or USB connectivity, or where the system is extremely slow with limited memory.
I’ve tried using UART for development, editing the files on the host, and sending them over via minicom to run on the target, but that’s also tricky since there’s only one console available, making it hard to run parallel processes like viewing logs or dmesg.
I also attempted setting up internet over USB, but that brings back the same issues I’ve faced with internet connections.
So, I’m curious — how is development typically handled for embedded Linux, especially for slower devices without internet or USB access? What tools or workflows do you recommend for situations like these?
Thanks in advance!