Some USB devices (especially cheap ones) are not fully compatible with the USB Stack and when you connect such devices to your target board, the kernel may output errors similar to the one below even though most other devices work perfectly. sd 3:0:0:0: SCSI error: return code = 0x10070000 end_request: I/O error, dev sda, sector 0 Buffer I/O error on device sda, logical block 0 sd 3:0:0:0: SCSI error: return code = 0x10070000 end_request: I/O error, dev sda, sector 8 Buffer I/O error on device sda, logical block 1 sd 3:0:0:0: SCSI error: return code = 0x10070000 end_request: I/O error, dev sda, sector 16 sd 3:0:0:0: SCSI error: return code = 0x10070000 end_request: I/O error, dev sda, sector 24 sd 3:0:0:0: SCSI error: return code = 0x10070000 It previously happened to us with a IDE to USB adapter based on Super Top Bridge ( VID: 0x14CD / PID: 0x6600). The […]
Detecting Code Duplicates in C/C++ with CCFinderX
Over time, as your source code repository and software team(s) grow, you may have more and more code that just does the same thing. This is obviously not desirable since several persons work on code doing the same thing, so you just pay twice for the cost for development and debugging. To avoid this issue, proper team communication and management must be in place (e.g. discourage copy/paste of source code, use a common source control repository..). However, it might be difficult to always detect where the code duplicates are. Luckily, code duplication analysis tools such as CCFinderX are here to help. As described on CCFinderX website: CCFinderX is a code-clone detector, which detects code clones (duplicated code fragments) from source files written in Java, C/C++, COBOL, VB, C#. CCFinderX is a major version up of CCFinder, and it has been totally re-designed and re-implemented from scratch. Its new design and […]
Languages, Unicode and Charset
If your application needs to support multiple languages or if it needs to support languages with different character sets such as simplified Chinese (GB2312, GBK, GB18030, HZ,..) or traditional Chinese(BIG5, HKSCS, EUC-TW) you’ll need to make yourself familiar with Unicode and the different character sets. In this article, we’ll focus on introducing character sets, manipulating and converting charsets and the possible challenges you may encounter while handling Unicode text files. If you plan to support multiple languages, you’ll also have to internationalize your application, for example by using Po files for different languages, a Po file editor and possibly have the translations done in launchpad if your project is open source. But this would be another subject. Go for Unicode If you are building a new application make sure its structure is based on Unicode (UTF-8, UCS-2, UTF-16 or UTF-32 ) since those charsets can handle most written languages (UTF: […]
Linux Scripts to find Public IP Address
In some cases, you may need to know your public IP or the public IP of a server behind a NAT (e.g. for remote SSH login) if the IP is assigned dynamically as is the case for PPPoE connections. Here are several ways to find your public IP in Linux using the shell. 1. Using curl (almost too simple) curl -s http://www.whatismyip.org 2. Using wget wget -q -O – checkip.dyndns.org|sed -e ‘s/.*Current IP Address: //’ -e ‘s/<.*$//’ 3. Using lynx lynx -dump checkip.dyndns.org If you have access to a web browser, you can simply use http://www.whatismyip.org, http://checkip.dyndns.org or http://www.moanmyip.com. Jean-Luc Aufranc (CNXSoft)Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011. www.cnx-software.com
Linaro: Embedded Linux for ARM
Linaro is a Not For Profit (NFP) engineering organisation that works on Linux based open source software and tools. The organisation focuses on the ARM platform, mainly ARM v7A architecture, for example ARM Cortex-A8 or dual-core Cortex-A9 processors and is sponsored by ARM, Freescale, IBM, Samsung, ST-Ericsson, and Texas Instruments. The purpose of Linaro is to reduce the number of different Linux kernel for the ARM platform. They plan on releasing tools and Linux kernel every 6 months. And after about 6 months of existence, with around 80 engineering staff, they managed to release their first public version: Linaro-10.11 on the 10th of November for TI OMAP4 Panda Board, IGEPv2, Freescale iMX51 and ST-E U8500 platforms. This release is based on Linux 2.6.35 kernel, GCC 4.4 toolchain and uBoot 2010.09. They released Linux 10.11 source code and tools, the hardware packs and the build instructions. Linaro also planned several technical […]
USB Hotplug Parameters and A Simple Linux USB Hotplug Script
USB Hotplug allows your system to detect a USB device has been inserted or removed and perform certain actions upon the USB device detection. The article below is largely inspired by http://linux-hotplug.sourceforge.net/?selected=hotplug which does not seem to work anymore. USB hotplugging involves: MODULE_DEVICE_TABLE support in the USB Device Driver API, so that a driver’s probe() routine is called only when it’s very likely to want to bind to a particular interface. USB always uses this. Support for invoking the hotplug helper (/sbin/hotplug by default) when devices are added or removed. This functionality is enabled only by CONFIG_HOTPLUG. That hotplug helper usually contacts a policy agent which handles the USB-level configuration or activation tasks appropriate to this device and the current system configuration. Boot-time configuration (“cold-plugging”) can be managed by the /etc/rc.d/init.d/hotplug startup script, if the “usbmodules” command line utility is available. (There is also a “diet hotplug” tool for use […]
Socket Programming: Client crashes when exiting server
One of our digital signage applications was crashing when the control server was shutdown at the same time a command was sent with no apparent reason. It would always crash inside the write function (see code below) and no error message were returned. sent = write(fd, buf, n); After a while, we found that in case the connection with the server is lost, and write tries to access the server, it will generate a SIGPIPE signal and in most systems, the application would just exit by default. A simple way to handle this case was to ignore the pipe signal by adding the following line during initialization: signal(SIGPIPE, SIG_IGN); In case the server is down at the time the write function is called, the signal SIGPIPE would be ignored, write would return -1 and errno should return 32 (Broken pipe). Alternatively, if needs be you could also handle the SIGPIPE […]
List the dynamic libraries used by a program
In order to know which dynamic libraries a particular binary is using, just type ldd. For example with busybox: sh-3.00# ldd /bin/busybox /bin/busybox: is setuid libcrypt.so.0 => /lib/libcrypt.so.0 (0x2aaed000) libm.so.0 => /lib/libm.so.0 (0x2ab41000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x2ab9c000) libc.so.0 => /lib/libc.so.0 (0x2abeb000) ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000) Jean-Luc Aufranc (CNXSoft)Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011. www.cnx-software.com