ARM+LINUX Route , Focus on Embedded Linux Operating system and its application software development goal :
          (1) Master the structure and principle of mainstream embedded microprocessor ( It is preliminarily determined as arm9)
          (2) Must master an embedded operating system  ( Preliminary determination   by uclinux or linux, Version to be determined )
          (3) Must be familiar with embedded software development process and do at least one embedded software project .
 What are the disadvantages of embedded software development :
        (1)  The starting point is high , The techniques used are often difficult , If the software and hardware foundation is not good , Especially the operating system level software foundation is not deep , May not be suitable for this trip .
        (2) The number of enterprises in this field is far less than that of Internet enterprises . At the same time, the salary will be lower .
        (3) There are a few companies that often want people with master's degree or above to engage in embedded technology , It is mainly based on embedded system . But most companies do not have this requirement , As long as you have experience .
       (4) Strong platform support , It's hard to change platforms .
 Method steps :
1, Basic knowledge :
                 objective : Can understand the working principle of hardware , But the focus is on embedded software , Especially operating system level software , That will be our advantage .
                 subject 
: digital circuit  , Principles of Computer Organization , Embedded microprocessor architecture . assembly language ,C/C++, Principles of compilation , discrete mathematics  . Data structure and algorithm , operating system , software engineering , network , database .
                 method : There are many subjects , But they are all relatively simple foundations . Not necessarily all , Optional courses are available .
                 Focus on books :the c++ programming language, data structure -C2.
2, study linux:
                objective : In depth grasp linux system .
                method 
: use linux—〉linxu System programming development —〉 Driver development and analysis linux kernel . Look first 《 deep 》, That's the principle . After watching it several times , see 《 scenario analysis  》, In depth comparison , The two books intersect , Deep is the key , Love is the eye . The analysis is that 0.11 edition , Suitable for learning . Finally, in-depth code .
               Focus on books :linux Complete analysis of kernel ,unix Environment advanced programming , In depth understanding linux kernel ,linux Scenario analysis of kernel source code .
3, Learning embedded linux:
               objective : Master embedded processor and its system .
               method :(1) Structure and application of embedded microprocessor : direct arm The principle and compilation are enough , Don't repeat x86.
                          (2) Embedded operating system class :ucOS/II simple , Open Source , You can get started . After that, we will study deeply uClinux.
                          (3) There must be a development board (arm9 above ), You can take part in the training if you have conditions ( Rapid progress , Can you make some friends ).
              Focus on books : Mao de Cao 《 Embedded system  》 And others arm9 Manual and arm Assembly instructions, etc .
4, In depth study :
              A, Digital image compression technology : The main thing is to master MPEG,mp3 Equal coding and decoding algorithm and technology .
              B, Communication protocol and programming technology :TCP/IP agreement ,802.11,Bluetooth,GPRS,GSM,CDMA etc .
              C, Network and information security technology : Such as encryption technology , digital certificate  CA etc .
              D,DSP technology :Digital Signal Process,DSP The processor realizes the digital signal processing algorithm by hardware .
          
 explain : Too many details have not been explained , It can be adjusted according to the actual situation . The point is 1,3, It doesn't have to be done exactly in order . For learning c++, the reason being that c++ It's not just a language , A tool , She is also an art , A culture , A philosophical idea , But it's not something to show off . about linux kernel , Learning programming , It's also necessary to read some good code .
        
  be careful : We should learn to raise one against many , There is a strong foundation , A lot of things can be easily seen . Want to be a qualified programmer , The prerequisite is to be proficient in at least one programming language , And have good logical thinking . We must combine theory with practice . Don't just study technology , It's hard to squeeze in time, though , But there's still room to perfect other hobbies , Like the universe , Administration , Psychology , music , game , Science fiction film . There are still some things that we don't want to do, but we have to do ! Technology is programmed and reprogrammed . Never dream of reaching the sky step by step , Don't be impetuous , Don't think it's a long way to go . It's programming and programming , I'll program after that , Reprogramming ! When the opportunity comes, start a business ( Don't believe in miracles , It's hard to succeed if you start a business blindly , Even if it is successful, the development space is not necessarily very large ).
 Embedded book recommendation :
Linux Basics 
 1,《Linux And Unix Shell  Programming Guide 》
C Language foundation 
 1,《C Primer Plus,5th Edition》【 beautiful 】Stephen Prata                    2,《The C 
Programming Language, 2ndEdition》【 beautiful 】Brian W. Kernighan DavidM. Rithie(K & 
R)3,《Advanced Programming in the UNIX Environment,2nd Edition》
 4,《 Embedded Linux Application development details 》
Linux kernel 
 1,《 In depth understanding Linux kernel 》( Third Edition )     2,《Linux Scenario analysis of kernel source code 》 Mao Decao   Hu Ximing 
 R & D direction 
 1,《UNIX Network Programming》2,《TCP/IP Detailed explanation 》3,《Linux Kernel programming 》4,《Linux Device driver development 》(LDD)
 Hardware foundation 
 1,《ARM Architecture and programming 》 Du Chunlei     2,S3C2410 Datasheet
 System tutorial 
 1,《 Embedded system  ―― Architecture , Programming and design 》                
 2,《 Embedded system  ―― Using open source and StrongARM/Xscale processor 》 Mao Decao   Hu Ximing         3,《Building Embedded 
Linux Systems》
 theoretical basis 
 1,《 Introduction to Algorithms 》2,《 data structure (C Language Edition )》3,《 Computer organization and architecture ? performance analysis  》4,《 Deep understanding of computer systems 》【 beautiful 】Randal E.Bryant 
David O”Hallaron means 5,《 operating system : Essence and design principle 》6,《 Principles of compilation 》7,《 Data communication and computer network 》8,《 Principle and application of data compression 》
C Language book recommendation 
 1. The C programming language 《C Programming language 》2. Pointers on C 《C And pointer 》3. C traps and 
pitfalls 《C Traps and defects 》4. Expert C Lanuage 《 expert C programming 》5. Writing Clean Code—–Microsoft 
Techiniques for DevelopingBug-free C Programs
 《 Programming essence –Microsoft  Write high quality without mistakes C Procedure tips 》6. Programming Embedded Systems in Cand 
C++《 Embedded system programming 》7.《C Language embedded system programming practice 》8.《 high-quality C++/C Programming Guide 》 Lin Rui 
 Code as much as possible , Learn well C, We can't just focus on C itself . algorithm , Architecture is very important .
 Specific implementation route :
1, Lay a good foundation for embedded software programming 
 This stage focuses on laying a good foundation for embedded software programming , include 
                        *  study Linux The basic application of the system 
                        * Linux Common commands for 
                        * C Fundamentals of language programming 
                        *  Common data structure 
 especially C Understanding and application of pointer in language . The main purpose of this stage is to learn programming language , development environment  , And develop their own programming thinking , It lays a good foundation for further study of embedded development .
2, study ARM Architecture programming 
 This stage is the real embedded programming , First of all, we have to choose an embedded system CPU And an embedded development platform , at present ARM 
 Embedded CPU Most widely used , This stage focuses on learning embedded technology CPU Bare metal programming based on FPGA :
                    *  Familiar with interruption 
                     *  timer 
                     *  Serial port 
                     * NAND FLASH
                     *  network controller  
                     * LCD screen , touch screen 
                     * I2C  equipment 
                     * SPI  equipment 
 The hardware working principle of the common embedded peripherals , And how to use it C Language programming , Control the hardware . This stage in addition to learning to hardware programming , Also need to learn the knowledge of embedded hardware , But for embedded software engineers , The key is to learn how the hardware works , On the basis of mastering the working principle of hardware , Program and control the hardware . This is different from the emphasis of hardware engineers . At this stage, the corresponding school curriculum mainly includes analog circuit , digital circuit  , Principle of microcomputer and single chip microcomputer . The focus of this stage is to see CPU Chip manual , Most of the reference books are also translations of chip manuals .
3, Construction of learning embedded system 
 In this stage, we mainly study the construction of embedded system with operating system , Including the start-up process of the system 
                     * Bootloader Workflow of 
                     * UBOOT Compilation of 
                     *  Cutting and transplanting , Embedded Linux The tailoring of kernel , Transplantation and compilation 
                     *  Customization of embedded root file system 
                     * BootLoader, Burning and writing of kernel and root file system 
 
 The main purpose of this stage is to master the construction and burning process of embedded system with operating system , And have an overall understanding of the overall composition of embedded system software , It lays a solid foundation for us to learn Embedded Application and driver development .
4, Learning embedded Linux Application development 
 In this stage, we mainly learn the embedded technology of the upper layer Linux Application development , include 
                     *  be based on Linux Multiprocess 
                     *  Multithreaded network 
                     *  Files and directories 
  Master embedded technology Linux Application development technology based on virtual reality .
5, Learning embedded Linux Driver development 
  At this stage, we mainly study the underlying embedded system Linux Development and design of device driver , include 
                     *  Common character device drivers 
                     *  Block device driver 
                     * LCD Device driver 
                     *  Touch screen device driver 
  And the core technology of driver development 
6, Complete a comprehensive project 
 
 The key of embedded technology lies in the combination of theory and practice , We should be able to apply what we have learned , After completing all the above stages of knowledge learning , Have you ever learned , Can I use it , Can we apply the knowledge to solve the problems in the actual development , We need to complete a comprehensive embedded training project , for example : 
 Based on Embedded System Linux Platform based aircraft ,  Based on Embedded System Linux Intelligent robot based on the platform , These projects have integrated the application of embedded development , Drive and QT Development technology .
 
 
Technology