NTFS for Embedded Linux Systems

Since now more and more HD videos are larger than 4GB they can not be stored into FAT32 file system, and require the use of other file systems, the most popular being ext2/ext3 or NTFS. However, since many users may want to access the mass storage devices (IDE / SATA harddisk, USB Harddisk, USB Thumbdrives…) in Windows as well as in their embedded systems (IP STV, Digital Signage..) NTFS seems to the best choice to share data between Windows systems and embedded systems using Linux. NTFS is available in the Linux kernel. However only read-only is fully supported and the performance is about 25% less than ext-2 or ext-3 for the platforms we tested (EM8623L and SMP8635), but this is still acceptable to play most of HD Videos. However, if the device also needs to download videos from a server or other P2P clients, having a read-only file systems will not do it. For this purpose NTFS-3G can be used …

Finding and fixing memoy leaks in your software

Memory leaks will cause your device to crash after a period of time once it runs out of memory. A quick way to find out if your application has memory leak(s) is too monitor it with top: PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 1       root       15   0   2156    668  572 S     0           5 .0      0:00.14         application If you see the %MEM increase over time for no particular reasons, then you’ve got a memory leak. However, it might be tricky to isolate where the issue occurs exactly. The first thing to do is the review your source code for the following: Malloced memory is always freed fopen is always followed by fclose, and open by close scandir calls are properly freed Threads are properly terminated with pthread_cancel & pthread_join or pthread_detach, etc… If after a code review you cannot find the reason for the memory leak, use the following …

Reducing truetype font file size for embedded systems

Embedded systems often have limited memory, that can be a challenge when your application requires Asian languages where fonts might be several megabytes large. Below we describe a method to reduce the file size with Fontforge using simhei.ttf, a CJK font as an example. Fontforge Fontforge is an open source font editor running under Linux and Windows/Cygwin. For the latest version see http://fontforge.sourceforge.net/ Reducing Font Size Removing Bitmap from Font File. Some TrueType files embed a bitmap version of the font. When Fontforge opens such a file, it will ask whether to keep the bitmap or not. We can remove the bitmap to reduce the file size. Using a glyphs subset adapted to your application. We can use Fontforge with cidmap (Fontforge proprietary) and/or Cmap (from adobe) to perform this task. Please check http://partners.adobe.com/public/developer/font/index.html#ckf for further information on CJK/CID file for your language. In our example (simhei.ttf), which can be obtained from Microsoft Windows font directory, if we want to …

No password SSH – Login to a SSH server with private/public keys

If you often need to establish SSH connections to a server, entering the password each time may be an hassle or even a non-starter. For example, in our case we use ssh connections in our nightly build scripts, so obviously entering a password would not be an option here… So it can be useful to configure the server and you client to accept secure ssh connection without the need to enter a password.  What must be done, then , is to generate a public/private key pair, and copy the public part into the appropriate place on the server side. For doing this, on the user’s home directory, on the client machine, type: local> ssh-keygen -t dsa -f .ssh/id_dsa -t tells the type of encryption -f tells where to store the public/private key pairs. In this case, the .ssh directory on home is being used A password will be asked;  leave this part blank, just press <enter> Now, go the .ssh …

Mounting a JFFS2 image in a Linux PC

We often use JFFS2 binary images for embedded system, generating them with mkfs.jffs2. In some instances, it could also be good to mount a jffs2 image into your PC to modify it directly. To do that,  type the following commands as root in a linux shell: modprobe mtdcore modprobe jffs2 modprobe mtdram modprobe mtdchar modprobe mtdblock dd if=image-jffs2 of=/dev/mtd0 mount /dev/mtdblock0 mnt If your image is larger than the default kernel size (4MB in my case), you can try to adjust the mtdram device size with the total_size parameters. when inserting the mtdram module, e.g.: modprobe mtdram total_size=8096 where total_size is expressed in KB Further details can be found @ http://www.handhelds.org/hypermail/familiar/62/6232.html

Resizing an NTFS partition with Linux

If you have a computer where you already installed Windows and you wish to install Linux as well (dual boot), you may want to resize the NTFS partition to get more space for the Linux partitions. One way it to use Gparted (Gnome Partition Editor) – http://gparted.sourceforge.net/ with a boot CD. Here are the instructions: •  Boot from the CD •  Hit <ENTER> when you see the message “Boot:”. •  Select language, keyboard and screen resolution from the menus. •  The partitioner should start and the following steps are intuitive More details are available @ http://mlf.linux.rulez.org/mlf/ezaz/ntfsresize.html#example It is also possible to do it with a USB Thumdrive if you do not want to burn a CD and your bios can support booting from a USB device. http://gparted.sourceforge.net/liveusb.php

Sigma Designs EM862X Resources

We are using EM8623 for the development of set-top-box and digital signage applications. In order to develop for that platform, an SDK must be purchased directly from Sigma Designs. However, the linux kernel is open source so companies need to release the source if they modified it in their products. For example, you could download the GPL source released by Kiss Technology – http://www.kiss-technology.com/files/firmware/GPL.zip. This is only the GPL source for your reference, after that there are also sigma linux drivers (not released by sigma) and not GPL, and the MRUA package that needs to be purchased from Sigma Designs. One the challenge of using EM862X platforms (EM8620L, EM8621L, EM8622L, EM8623L etc..) is that it has no MMU (Memory Management Unit) and that may make the software debugging very interesting.. You may experience spectacular crashes, kernel panic without any apparent reason. But most of the time this is due to a stack overflow of the main process or one the …

Software Development Cycle Tools

In order to manage software development with a small team, we use the following tools: Version control software: e.g. CVS, Subversion, git… Bug tracking software: e.g. Bugzilla Nightly build scripts or continuous integration software: e.g. CCNet For our linux based projects (embedded software), we use CVS, Bugzilla and nightly build scripts (with crontab) For our Windows-based projects (.NET Framework), we use CVS, Bugzilla and CCNet.