Marcus Folkesson

Embedded Linux Artist

High resolution timers

High resolution timers Nearly all systems has some kind of Programmable Interrupt Timer (PIT) or High Precision Event Timer (HPET) that is programmed to periodically interrupt the operating system (if not configured with CONFIG_NO_HZ). The kernel performs several tasks in these ticks such as timekeeping, calculate statistics for the currently running process, schedule a new process and so on. The interrupt occurs at regular intervals - exactly HZ times per second.

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.

Modules with parameters

Modules with parameters Everybody knows that modules can take parameters, either via /sys/modules/<module>/parameters, sysctl or via cmdline to the kernel, but how are these parameters created? Parameters without callbacks The Linux kernel provides the module_param() macro. The syntax is: 1module_param(name, type, perm) Which will simply create the module parameter and expose it as an entry in /sys/modules/<module>/parameters. Code example 1int debug_flag; 2module_param(debug_flag, bool, S_IRUSR | S_IWUSR | S_IRGRP) 3MODULE_PARM_DESC(debug_flag, "Set to 1 if debug should be enabled, 0 otherwise"); MODULE_PARM_DESC() is a short description of the parameter.

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: 1 marcus@Ilos:~$ ~? 2 Supported escape sequences: 3 ~.

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 does 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 see the shared libraries dependencies for an ELF file and the ldd command is simply stripped out from target. (I do often strip targets :-) ) 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!

Quickfix in VIM

Quickfix in VIM One of the most fascinating things with the VIM editor is that you find new features every day, even after many years of heavy usage. Quickfix is one of those features. Quickfix parse your compiler-output and let you easy navigate to the concerned lines with errors and/or warnings. Great hue? How does it work? The builtin command is (surprisingly) make. Just do: :make (without bang character!)