美文网首页
嵌入式linux学习路线

嵌入式linux学习路线

作者: 牧馬放飏 | 来源:发表于2019-01-01 22:44 被阅读25次

    说明

    学习嵌入式linux完全出自于兴趣,没有系统的学习过程,这里是搜集网上前辈的学习经验。

    背景

    嵌入式开发就是指在嵌入式操作系统下进行开发,一般常用的系统有WinCE,ucos,vxworks,linux,android等。另外,用c,c++或汇编开发;用高级处理器,arm7,arm9,arm11,powerpc,mips,mipsel等,或加上操作系统也属于嵌入式的开发。

    嵌入式系统(Embedded System)是指以应用为中心、以计算机技术为基础,软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。举例来说,大到油田的集散控制系统和工厂流水线,小到家用VCD机或手机,甚至组成普通PC终端设备的键盘、鼠标、硬盘、Modem等均是由嵌入式处理器控制的。

    嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。

    像我们平常见到的手机、PDA、电子字典、可视电话、VCD/DVD/MP3 Player、数字相机(DC)、数字摄像机(DV)、U-Disk、机顶盒、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。

    顺序

    • 编程基础
      • C语言
      • 数据结构和算法
      • 设计模式
    • Linux学习顺序
      • 第一部分:Linux平台搭建与环境熟悉
      • 第二部分:虚拟机安装和linux系统安装
      • 第三部分:嵌入式LINUX环境搭建
      • 第四部分:U-Boot
      • 第五部分:Linux内核移植
      • 第六部分:LINUX根文件系统
      • 第七部分:LINUX应用学习
    • 嵌入式基本技能
      • 1、Linux 基础
      • 2、Shell 编程基础
      • 3、Linux下的C编程基础
      • 4、嵌入式系统开发基础
      • 5、嵌入式系统移植
      • 6、嵌入式 Linux 下串口通信
      • 7、嵌入式系统中多进程程序设计
      • 8、嵌入式系统中多线程程序设计

    编程基础

    C语言

    C语言是嵌入式开发必备的基础知识。在Linux下从事C语言的开发,你会觉得更为顺畅、更为自然,因为C语言是因unix的出现而诞生的,Linux内 核几乎完全是由C语言编写完成的。学习C语言,如果不会用指针,那么就称不上会C语言。做嵌入式开发指针更显得尤为重要,所以做嵌入式开发除了掌握位操 作、限定词等,对指针的掌握是不可或缺的。而且要掌握多级指针、函数指针等等。涉及到指针,那么就会讲到内存分配。在大学中,学习C语言一般的学习很少讲 到内存分配,但是如果期望从事嵌入式开发,那么就必须懂得C语言是怎么做内存分配管理的。指针之外,还要学习模块化编译处理、指针与数组、gcc、 Makefile、GDB、递归、结构体、宏定义使用等。C语言是整栋嵌入式大厦的基础,所以在学习嵌入式时,必须把C语言重视起来,多敲代码,多练。

    数据结构和算法

    如果说C语言相当于文字,那么数据结构和算法,就相当于在造句、写文章。代码质量有一部分取决于对数据结构的掌握程度。在数据结构部分我们要把链表、树、排序作 为学习重点。而且我们也可以查看一些比较常见的函数(如strcopy、strcat、printf等)在内核中是如何实现的,以及编写代码模拟堆栈,这 不仅有利于编写代码质量的提高,而且还可以初步了解Linux内核精髓,为今后工作打下坚实的基础。

    C++、QT在嵌入式开发领域,是用来开发图形界面的,希望从事上层应用开发及图形界面,那么在C++、QT方面需要比较深入的学习

    经典书籍推荐:

    • 《C程序设计语言》
    • 《C专家编程》
    • 《C陷阱和缺陷》
    • 《C和指针》
    • 《数据结构与算法分析--C语言描述》
    • 《C++ Primer》
    • 《GNU Make》
    • 《C++ QUI QT4编程》

    设计模式

    Linux学习顺序

    第一部分:Linux平台搭建与环境熟悉

    熟悉linux系统;区分各种版本的Linux系统,以便于拓展 Linux视野。

    1、Linux 简介;
    2、Linux 系统的主要特点;
    3、Linux 的组成;
    4、主要的 Linux 版本;
    5、嵌入式 Linux简介与发展

    第二部分:虚拟机安装和linux系统安装

    1、虚拟机安装;
    2、Linux系统的安装;
    3、Linux系统的常用软件的安装;
    4、Linux快速入门
    5、熟悉运用 Linux环境下,常用命令的操作与系统设置,如常用的 Shell;掌握基本的Shell 应用

    第三部分:嵌入式LINUX环境搭建

    1、 建立嵌入式 Linux开发环境
    2、 熟悉嵌入式开发平台
    3、 嵌入式 Linux开发工具
    4、 Linux下的调试技巧
    5、 MAKE工程管理器
    6、 硬件环境的搭建;arm-linux-gcc与 gcc安装配置

    第四部分:U-Boot

    熟悉 U-Boot 的作用及工作流程;了解Bootloader 的代码结构、编译过程;移植U-Boot;掌握常用的U-Boot命令。

    01、Bootloader介绍
    02、u-boot工程介绍
    03、u-boot的编译使用
    04、u-boot源码分析
    05、u-boot资源分配
    06、配置编译u-boot
    07、u-boot移植过程
    08、u-boot常用命令操作
    09、添加u-boot新命令
    10、设置u-boot环境变量
    11、u-boot驱动添加如网卡:DM9000

    第五部分:Linux内核移植

    熟悉内核的原码结构和kbuild Makefile语法;掌握和内核、驱动模块编译相关的原理及方法。

    1、Linux内核介绍
    2、Linux内核特点
    3、Linux内核源代码结构
    4、Linux内核选项解析
    5、Linux内核编译链接
    6、内核模块编译、使用方法

    第六部分:LINUX根文件系统

    1、busybox 包移植、编译
    2、Linux跟文件系统制作过程
    3、根文件系统介绍
    4、nfs文件服务器系统搭建

    第七部分:LINUX应用学习

    嵌入式Linux应用开发和系统开发是嵌入式Linux中最重要的一部分,也是企业人才需求最广的一部分。

    主要目标是精通嵌入式Linux下的程序设计,熟练掌握嵌入式Linux的开发环境、系统编程以及网络编程,熟悉C++、QT编程并且深刻体会整个嵌入式Linux项目开发流程,强化学员对Linux应用开发的能力。

    1、Linux系统中的进程的概念,在应用程序中线程与父子进程的创建与应用
    2、线程之间、进程之间的通信
    3、进程间通信基本概念
    4、管道(PIPE)
    5、信号(SIGNAL)
    6、内存映射(MAPPED MEMORY)
    7、消息队列(MESSAGE QUEUE)
    8、信号量(SEMAPHORE)
    9、共享内存(SHARE MEMORY)
    10、tcpip协议在应用程序中的编程开发(SOCKET套接字编程开发)
    10.1. ISO/OSI七层协议模型与IP网络四层模式
    10.2. TCP/IP协议簇
    10.3. 基于嵌入式Linux的TCP/IP网络结构
    10.4. 基于嵌入式Linux的SOCKET编程
    10.5. UDP与TCP的区别
    10.6. UDP SERVER-CLIENT关系程
    11、文件读写与存储

    嵌入式设计应具备的基本技能

    1、Linux 基础

    • 安装Linux操作系统
    • Linux文件系统
    • Linux常用命令
    • Linux启动过程详解
    • 熟悉Linux服务能够独立安装Linux操作系统,能够熟练使用Linux系统的基本命令
    • 认识Linux系统的常用服务安装Linux操作系统
    • Linux基本命令实践
    • 设置Linux环境变量
    • 定制Linux的服务Shell
    • 编程基础使用vi编辑文件
    • 使用Emacs编辑文件
    • 使用其他编辑器

    2、Shell 编程基础

    • Shell简介
    • 认识后台程序Bash编程
    • 熟悉Linux系统下的编辑环境
    • 熟悉Linux下的各种Shell
    • 熟练进行shell编程熟悉vi基本操作
    • 熟悉Emacs的基本操作
    • 比较不同shell的区别
    • 编写一个测试服务器是否连通的shell脚本程序
    • 编写一个查看进程是否存在的shell脚本程序
    • 编写一个带有循环语句的shell脚本程序

    3、Linux下的C编程基础

    • linux c语言环境概述
    • Gcc使用方法
    • Gdb调试技术
    • AutoconfAutomake Makefile 代码优化
    • 熟悉Linux系统下的开发环境
    • 熟悉Gcc编译器
    • 熟悉Makefile规则编写Hello,World程序
    • 使用 make命令编译程序
    • 编写带有一个循环的程序
    • 调试一个有问题的程序

    4、嵌入式系统开发基础

    • 嵌入式系统概述
    • 交叉编译
    • 配置TFTP服务
    • 配置NFS服务
    • 下载Bootloader和内核
    • 嵌入式Linux应用软件开发流程熟悉嵌入式系统概念以及开发流程
    • 建立嵌入式系统开发环境制作cross_gcc工具链
    • 编译并下载U-boot
    • 编译并下载Linux内核
    • 编译并下载Linux应用程序

    5、嵌入式系统移植

    • Linux内核代码
    • 平台相关代码分析
    • ARM平台介绍
    • 平台移植的关键技术
    • 移植Linux内核到 ARM平台
    • 了解移植的概念
    • 能够移植Linux内核移植Linux2.6内核到ARM9开发板

    6、嵌入式 Linux 下串口通信

    • 串行I/O的基本概念
    • 嵌入式Linux应用软件开发流程
    • Linux系统的文件和设备
    • 与文件相关的系统调用
    • 配置超级终端和MiniCOM
    • 能够熟悉进行串口通信
    • 熟悉文件I/O
    • 编写串口通信程序
    • 编写多串口通信程序

    7、嵌入式系统中多进程程序设计

    • Linux系统进程概述
    • 嵌入式系统的进程特点
    • 进程操作
    • 守护进程
    • 相关的系统调用了解Linux系统中进程的概念
    • 能够编写多进程程序编写多进程程序
    • 编写一个守护进程程序
    • sleep系统调用任务管理
    • 同步与通信Linux任务概述任务调度
    • 管道 信号 共享内存 任务管理 API
    • 了解Linux系统任务管理机制
    • 熟悉进程间通信的几种方式
    • 熟悉嵌入式Linux中的任务间同步与通信编写一个简单的管道程序实现文件传输
    • 编写一个使用共享内存的程序

    8、嵌入式系统中多线程程序设计

    • 线程的基础知识
    • 多线程编程方法
    • 线程应用中的同步问题了解线程的概念
    • 能够编写简单的多线程程序编写一个多线程程序

    相关文章

      网友评论

          本文标题:嵌入式linux学习路线

          本文链接:https://www.haomeiwen.com/subject/ynsblqtx.html