(It is refered from: http://www.cnblogs.com/wwang/archive/2011/01/27/1944406.html)
He has been engaged in Linux kernel driver development for several years. I have read many books on Linux since I started to use Linux. Now I want to list some of the books that I think are really good.
The entry class always believes that before learning and developing a system, you must first be familiar with the use of this system. In view of tianchao's national conditions, most people are first exposed to Windows operating systems. Therefore, if most people want to learn Linux development, learning to use this system is an essential part. Now Linux beginners are happy. As the Linux desktop environment becomes more and more easy to use, it is very easy to get started with a new system. Although the command line is more efficient for improving work efficiency, we can put the process of getting familiar with the command into daily use. No matter what you learn, learning in practice is efficient and interesting. At this stage, we may not necessarily need books. Currently, many Linux Release versions of Wiki are very detailed. You can find the corresponding wiki reading Query when using a release version. In addition, the desktop environment is changing too fast, and there is almost no need to read books about the desktop. Most of these books are outdated as soon as they are published. Which of the following books are valuable? I recommend books with relatively stable technologies. For example, the basic architecture and commands of Linux are always the same, and they have not changed much since UNIX in ancient times, the knowledge of such books is also the basis for greatly improving our productivity in the future. For example, laruence's Linux house dish, for example, Unix power tools (translated as "UNIX Super tool "), or the "Linux + study guide" prepared for the Linux + certification exam. Of course, this type of books does not actually require intensive reading. You can use it as a tool book for future reference after a quick browsing. In programming books of Unix-like programming systems, the most classic is the advanced programming in the Unix environment (translated as "Unix environment advanced programming"), which is short for apue "), this book was hailed by many UNIX programmers (including Linux) as the "Bible ". Borrow the advertisement word of uncle Ge: "This is like getting into a restaurant. On a street, where can my family go into more ". Apue provides a comprehensive and detailed explanation of the programming interfaces of Unix-like systems. For this book, we should not only carefully read it, but also keep it in our case. However, apue seems a little deeper for Linux Programming beginners, and many details are not used in Linux. In the book about Linux programming, advanced Linux programming should be more suitable for beginners. Don't be scared by the title of "advanced". The content in the book is easy to understand. After reading this book, we should look at apue for better results. If you want to develop a GUI program, the above two books will be powerless. In the Linux world, the most common GUI toolkit is GTK + and QT. There are not many books on GTK +, and online documents are only suitable for reading. They are not a complete learning system. Foundations of GTK + development is a good book. developers who like GTK + can use it as an entry-level book. Relatively speaking, QT books are rich, which is closely related to qt's good cross-platform capabilities. QT books are not just for Linux programmers, you can also use QT development programs in Windows and Mac OSX. The QT books worth reading include C ++ GUI programming with qt4, foundations of QT development, and the art of building QT applications. these three documents are suitable for beginners of QT. In addition, "Advanced QT programming" will introduce some advanced usage of QT, which is suitable for readers who have certain QT basics. For Linux kernel or device-driven developers, the most comprehensive and direct learning materials must be the Linux kernel code and its documentation. The release cycle of the Linux kernel is very short, and the publishing of related books cannot keep pace. However, as the kernel code grows larger, the learning curve is steep, and readers need books to provide guidance. This is indeed a very contradictory issue. Fortunately, many Linux kernel writers are also very diligent and often update their work. Like Robert Love, Linux kernel development, which is based on the 2.6 kernel, has been updated to the third edition. Lkd is a good book suitable for Kernel beginners to read. The review of lkd can be referenced by the translator's preface:
Compared with the kernel of Daniel P. bovet and Marco cesati, which is named understand the Linux kernel, it has five points of detail. Compared with the typical Linux device drivers, it has five points of reasoning. It can be said that this book fills the gap between the theory and practice of Linux kernel. "One bridge is flying across the North and South, and the sky is changing ".
Thank you, Miss Chen. Her translator gave me two other classic books to talk about, namely, understanding the Linux kernel and Linux device drivers. For these two books, if you want to pick up their shortcomings, I can only say that the content is a bit old and many knowledge points need to be updated. In addition, what I want to say is, they brought me the kernel driver for development. Of course, there is lkd. Recently, I found another excellent book on Linux Kernel Analysis, professional Linux kernel architecture. I am currently reading this book, which is very well written, and because it is relatively new (but it seems that the 2.6.24 kernel is very old now ), students who have not read ulk can directly read this book. Tool workers must first sharpen their tools to do their best. For Linux development, related tools still need to be used skillfully. For example, GNU tool chain, automatic build tool, editor, and version control tool. Here is an all-encompassing book called Handbook of open source tools, which describes a variety of open source tools, which can be called the general idea of open source technology. This book is intended to cover all aspects, so it is not necessary to read it in depth. GNU tool chain is sufficient to refer to Redhat's "The gnupro toolkit". If you pull out makefile separately, you can also refer to "managing projects with GNU make". For the automatic build tool, see autotools. If you want to use cmake, we recommend cjacker's cmake practice. Mastering cmake is said to be an authoritative book of cmake, but it has never been seen. Speaking of the editor, the most famous ones in Linux are vim and Emacs. For the background of the two, you can see why Emacs and Vim are called two major artifacts. I have almost never used Emacs. I once spent nine yuan on a book called "Learning GNU Emacs" during Dangdang's activities. I think this book is enough for me to get started with Emacs. Vim is one of the editors I often use (another is Kate, one of the reasons I initially liked Kate is that it provides the vim editing mode). There are two books worth reading: "A byte of VIM" and "Hacking Vim 7.2", but for beginners, it is better to follow the vimtutor of vim. There are many version control tools in Linux, including the traditional subversion and distributed tools such as git. For details about subversion, refer to version control with subversion. For details about git, refer to version control with git, git internals, and pro git. In addition to the above categories, there are also some books worth introducing. For example, the art of Unix programming mainly introduces the design and development philosophy, ideological and cultural system, and community culture in the Unix system field, with a wide coverage. Some of the content in this book is similar to revolution OS. You can verify it by yourself. For this book, we can also use it as a novel or a history book. We can watch it in bed, lie on the couch, or sit on the toilet like a strange guy, in short, you do not have to sit at your desk. Many people have recommended computer systems: a programmer's perspective. This is a very classic textbook on computer systems. The content of csapp is comprehensive, concise, and easy to understand. After reading it carefully, it is very helpful to clarify the computer architecture and even the Linux kernel. Although the Chinese name has been translated into "deep understanding of computer systems" (This translation is not appropriate), why do Chinese textbooks seem more "profound? Maybe, this is the gap between the author's power.