[R&D Notes] Troubleshooting Busybox 1.7.2 taskset.c Compilation Errors

While compiling Busybox 1.7.2 using the default config (make defconfig) with a specific ARM toolchain, I encountered two specific compilation errors. One was related to the route applet, and the other was in taskset.c. I resolved the taskset.c issue by disabling it temporarily, but later found a proper fix. The root cause lies in a mismatch between uClibc (which Busybox is primarily designed for) and glibc. Specifically, the number of arguments for sched_getaffinity and sched_setaffinity differs between the two. ...

September 30, 2007 · 1 min · 206 words · Fran Kuo

[Work Notes] Ubuntu Dash vs Bash

To speed up the boot process, Ubuntu uses dash as the default shell instead of the traditional bash. You can verify this at /bin/sh → /bin/dash. If you want to switch back to the original bash, type the following at the prompt: sudo dpkg-reconfigure dash When the configuration window appears, select “No” to revert back to bash. Recommendation: If you’re doing software development on Ubuntu and write shell scripts, it’s safer to switch back to bash for compatibility. ...

September 25, 2007 · 1 min · 78 words · Fran Kuo

Ubuntu Transition: Dash vs. Bash

To accelerate boot times, Ubuntu moved to using Dash (/bin/dash) as the default system shell (/bin/sh), replacing the more feature-rich but slower Bash. You can verify this linkage by checking /bin/sh -> /bin/dash. While this is great for system performance, it can cause unexpected failures in shell scripts designed specifically with “Bashisms” (features unique to Bash). If you need to revert the default shell back to Bash for compatibility reasons, you can execute the following command: ...

September 25, 2007 · 1 min · 125 words · Fran Kuo

[Financial Perspective] Foxconn's New 6C+IP Strategy

BusinessWeek Issue 1035 — Lead Story: Joining forces with e-commerce’s army of ants, Terry Gou sets his sights on becoming an internet “flying tiger.” Taiwan’s most globally powerful manufacturer is undoubtedly Foxconn. To build a new strategic layout, Foxconn has been in negotiations to cooperate with Alibaba, China’s largest e-commerce platform — leveraging internet commerce to capture what matters most in the digital age: information and personalization. Four years ago, Foxconn expanded upward from its original three C’s (Computers, Communications, Consumer Electronics) by adding three more (Automotive Electronics, Channels, Content). Now, by bridging the gap between virtual and physical worlds, Foxconn has officially entered the internet industry. ...

September 24, 2007 · 3 min · 453 words · Fran Kuo

[Financial Perspective] Manulife CEO John Mineker on the Art of M&A

The key to rapid M&A: make personnel decisions swiftly, and avoid internal power struggles. Priority order for an insurance company’s development should be: → Introduce and innovate products → Build a more efficient organization → Expand distribution channels → Improve risk management → Pursue M&A The real key to winning in M&A is respect. Price matters, but the real secret is not overpaying — the true value of an acquisition is realized in long-term stock performance. ...

September 24, 2007 · 2 min · 247 words · Fran Kuo

[Personal Reflections] A Parent's Child

Looking at my parents’ silver hair and the lines the years have carved into their faces, my heart aches. After starting university, aside from a brief stint at home during military service, I’ve always been away — studying far from home, and now working even farther. Though I’ve never said it out loud, there’s a small knot of guilt that stays with me. I hope my parents live peacefully, healthily, and happily. That is my greatest wish for them. ...

September 24, 2007 · 1 min · 205 words · Fran Kuo

[R&D Notes] Implementing Linux Daemons in Embedded Systems

Implementing Daemons in Embedded Linux systems is a fundamental task for long-running services. Based on the excellent Linux Daemon Writing HOWTO by Devin Watson, I have refactored several processes in my current project to run as background services (daemons). By backgrounding these processes, we ensure they remain resident in the system without blocking the console or being tied to a specific session. Core Implementation Pattern The following C snippet demonstrates the standard procedure for “daemonizing” a process: fork() from the parent, create a new session with setsid(), change the working directory, and close standard file descriptors. ...

September 19, 2007 · 2 min · 245 words · Fran Kuo

[Work Notes] Patch vs. Embedded Systems Development Notes

Recently I was assigned to work on a streaming server. Working from the original development platform, we applied patches via shell scripts to transform source files — using patches on the original source code to generate modified files, then compiling those into the required libraries or executables. At first I didn’t think much about why this approach was used, but I’ve recently started to appreciate its advantages. The original source files we need are open-source packages downloadable from the internet. To track our modifications, we use the diff command to create patch files. When we combine multiple application components together, we end up with a collection of tarballs and patch files. We then manage them with shell scripts organized into three types: ...

September 19, 2007 · 2 min · 223 words · Fran Kuo

Practical Daemon Implementation in Embedded Linux

For anyone working with Linux, the concept of a “Daemon” (or service) is fundamental. Daemons are background processes that operate independently of any active user session. I recently deep-dived into this topic via Devin Watson’s Linux Daemon Writing HOWTO, which provides a fantastic primer and a clear template. Building on that foundation, I refactored several processes in my current project to run as persistent background services. Below is a code snippet demonstrating the core structural requirements for a Linux daemon: ...

September 19, 2007 · 2 min · 282 words · Fran Kuo

Reflections on Patch Files and Embedded Systems Development

Recently, I was assigned to work on a streaming server project. On our development platform, we utilize a combination of patch files and shell scripts to manage source code. We start with the upstream source, apply modifications via patch commands, and then compile the results into the necessary shared libraries or executables. Initially, I didn’t give much thought to why we adopted this specific workflow, but lately, I’ve begun to appreciate the profound advantages of this approach. ...

September 19, 2007 · 2 min · 254 words · Fran Kuo