In the middle of 2005, I passed the doctoral dissertation pre-defense. There were no tasks left in school. So I began finding a job before I got the diploma.
Graduated from school with no working experience, it was really difficult to take the first step. Interviewed more than a dozen companies, only a few gave me offer. At last, I chose Leadtek, which is a high-tech company in computer and consumer electronics field. My job responsibilities were about the R&D and product development in multimedia network streaming technologies, IP video phone, and IP set-top box. This is a relatively new direction, and the trend of this market is arising. I felt it should be good prospects for my career development.
The title of my first job was Embedded Software Engineer. My role was suddenly switched from a school student into a workplace engineer. It was obvious that I need an adaptation process. In the first three months of my work, I still lived in the dormitory of my school, but every day I had to go to work in the outside company. Interesting.
In the first few months I learned WinCE. As a fresh newbie in work, I had a great enthusiasm. So the learning efficiency was high. In a few months I got a basic understanding on WinCE. I also practised building WinCE system on ARM S3C2440 evaluation board, and developed several small WinCE applications.
But later, as the changes of our projects, my research direction was also changed, and turned to Linux and DSP software development.
Multimedia processing must need a DSP processor. Our products used TI DSP – DM642. My work involved in DSP programming, but not in depth. My work focused more on the Linux application programming.
The first time I used Linux was in my PhD period. The first Linux system installed in my computer was Red Hat Linux 6.0. Since then, learning is never stopped. After joined Leadtek, due to my work, I learned Linux in-depth and systematically, including the operation of Linux system, application programming, TCP/IP socket network programming, QT/E graphics interface programming, and so on. I read the classic book “Advanced Programming in UNIX Environment”. This book is really a bible in UNIX programming. It covers all aspects of UNIX programming, and no any nonsense. Almost each paragraph in the book has a knowledge point.
I like the simplistic style of Linux applications. One program just focuses on one task, and does it well. Unlike Windows GUI programs, which are so bloated.
Understanding embedded systems was also begun from this period of time. From bootloader to memory address space, from debug serial port to system hardware configuration, from cross-compiling to Makefile, I learned and practised a variety of basic knowledge in embedded systems.
Another achievement in this period was that I learned a lot of knowledge about streaming media. There were mainly two aspects: network protocols, and audio/video codec. The streaming media technology involves a lot of network protocols, including RTP/RTCP, RTSP, SIP, STUN, and etc. Audio and video codec is also necessary, such as MPEG4, H.264, PCM, G.729, and etc. This area is very new, and I’m interested in it. In my spare time, I even finished a small project cooperating with one of my classmates.
The Linux embedded system shows a great interest on me. So I continued to learn more in-depth and comprehensive knowledge in this area. I bought an ARM s3c2410 evaluation board to study porting and building ARM Linux system. My goal was: to complete a whole process from a “bare board” which doesn’t have any code to a fully running Linux system.
After about one year study, I finally achieved this goal. There were many questions during the study, but fortunately I could rely on the online technical articles from Internet. In this process, I had a great harvest! Through building a complete embedded Linux system, all aspects of embedded Linux were systematically studied, including making a tool chain, porting Bootloader (U-boot), compiling the kernel, making a root file system, porting drivers. I summarized what I learned in every step. Finally, I wrote a 140-page study note. It’s very helpful, and I can review it when I forget something in the future.
In the process of ARM Linux porting, Linux kernel knowledge is necessary, especially in the part of the system start-up phase. Therefore, I learned more knowledge of the Linux kernel. Learning Linux kernel is normally started from the Linux device driver. I read some books about Linux device driver, and finally understood the knowledge of Linux driver development. In fact, that is the Linux kernel development.
Leadtek is my first company. Overall, I learned a lot of new technologies here, and I embarked on a road of software development. In the meaning time, I felt the Leadtek’s R&D capability was not strong, and project management was not standardized. I felt the job did not take full advantage of my potential.