Marcus Folkesson

Embedded Linux Artist

FIT vs legacy image format

FIT vs legacy image format U-Boot supports several image formats when booting a kernel. However, a Linux system usually need multiple files for booting. Such files may be the kernel itself, an initrd and a device tree blob. A typical embedded Linux system have all these files in at least two-three different configurations. It's not uncommon to have Default configuration Rescue configuration Development configuration Production configuration ... Only these four configurations may involve twelve different files.

Magic SysRq

Magic SysRq Every kernel-hacker should knows about the magic sysrq already, so this post is kind of unnecessary. To enable the magic, make sure CONFIG_MAGIC_SYSRQ is set in your Kernel hacking tab. I use this feature... a lot. Mostly for set loglevel and reboot the system, but it's also very useful when debugging. So, how to use it? As everybody is using GNU Screen (what else) as their TTY terminal, the keyboard combination is: ctrl+A B.

Take control of your Buffalo Linkstation NAS

Take control of your Buffalo Linkstation NAS I finally bought a NAS for all of my super-important stuff. It became a Buffalo Linkstation LS200, most because of the price ($300 for 4TB). It supports all of the standard protocols such as FTP, SAMBA, ATP and so on. However, it would be really useful to use some sane protocols like sftp so you could use rsync for your backup scripts.

NAT with Linux

NAT with Linux To share an internet connection may sometimes be very practical when working with embedded devices. The network may have restrictions/authentications that stops you from plug in your device into the network of the big company you are working for. But what about creating your own network and use your computer as NAT (Network Address Translation)? It's not that hard to setup, it's actually just a few command lines away.

-ENOENT, but believe me, it's there

-ENOENT, but believe me, it's there Almost every ELF-file in a Linux environment is dynamically linked, and the operating system has to locate all dynamic libraries in order to execute the file. To its help, it has the runtime dynamic linker, whose only job is to interpret the ELF file format, load the shared objects with unresolved references, and, at last, execute and pass over the control to the ELF file.

Terminate a hanging SSH session

Terminate a hanging SSH session It may be very frustrating when SSH sessions just hangs because the target is power cycling or something. Lucky for you there is a "secret" escape sequence that allows you to terminate the session (and a few other things). The escape sequence is <enter>~X where X is a command letter. To see all available key sequences, type <enter>~?. Example output: marcus@Ilos:~$ ~? Supported escape sequences: ~.

Interrupts, and how to divide them between cores

Interrupts, and how to divide them between cores Symetric MultiProcessing (SMP) are becoming increasingly common in embedded systems. Many chip manufacturers such as Texas Instruments and Freescale offers ARM multicores, even FPGA manufacturers like Xilinx and Altera has System-on-Chip with multiple ARM cores. One benefit with SoC is that it's even possible to add soft cores in the programmable logic if it's necessary. The trend is clear, multiple cores is here and it's not likely to be fewer of them.

Linux memory overcommit

Linux memory overcommit Linux is generous in terms of memory, it will almost never fail on requests from malloc(3) with friends. What does this mean in practice and how may it be a potential issue? In short, overcommit memory means that the system will give the application so much memory it's asking for, even if the physical memory is not available. How may this work? Well, the requested memory comes with one small restriction; the application is given as much memory it demands if it not going to use it.

LDD without LDD

LDD without LDD I often meet colleges at work who gets frustrated when they try to print the shared libraries dependencies for an ELF or library, and the ldd command is simply stripped out from target. (I do often strip targets :-) ) As if that would be a big problem. The ldd command is not a binary executable, but a script that simple calls the runtime dynamic linker with a few environment variables set, and you may do the same!