zoukankan      html  css  js  c++  java
  • 【韦东山】嵌入式linux介绍

    嵌入式Linux系统

    = bootloader + linux内核 + 根文件系统(里面含有APP)。

     

    bootloader

    它的目的是启动内核,去哪等读内核?读到哪里?去Flash等外设读内核,存到内存里去。所以需要有Flash里外设的驱动能力,为了调试方便还会有网络功能。
    所以,可以认为 booloader = 裸机集合,它就是一个复杂的单片机程序。

     

    Linux内核

    Linux内核的最主要目的是去启动APP,APP保存在哪里?保存在“根文件系统”里。“根文件系统”又保存在哪里?在Flash、SD卡等设备里,甚至可能在网络上。所以Linux内核要有这些Flash、SD卡里设备的驱动能力。

    不仅如此,Linux内核还有进程调度能力、内存管理等功能。
    所以:Linux内核 = 驱动集合 + 进程调度 + 内存管理等


    ================【Bootloader】==========================

    Bootloader有很多种,常用的叫作u-boot。
    在实际工作中,对于u-boot基本上是修修改改,甚至不改。但是u-boot本身是很复杂的,比如为了便于调试,它支持网络功能;有些内核是保存在FAT32分区里,于是它要能解析FAT32分区,读FAT32分区的文件。
    花那么多精力去学习u-boot,但是工作中基本用不到,这对初学者很不友善。
    所以,对于初学者,我建议:理解u-boot的作用、会使用u-boot的命令,这就可以了。
    如果你的工作就是修改、完善bootloader,那么再去研究它吧。

    =================【学习驱动】===========================
    之前我们说过Linux内核 = 驱动集合 + 进程调度 + 内存管理等,
    如果要学习Linux内核,从驱动程序入手是一个好办法。

    但是人人都要学习Linux内核、人人都要学习Linux驱动吗?显然不是。
    作为初学者,懂几个简单的驱动程序,有利于工作交流;理解中断、进程、线程的概念,
    无论是对驱动开发、应用程序开发,都是很有好处的。

    所以对于初学者,建议前期只学习这几个驱动:LED、按键、中断。
    LED驱动程序:这是最简单的驱动程序。
    按键驱动程序:它也比较简单,从它引入“中断”。
    中断:从“中断”它可以引入:休眠-唤醒、进程/线程、POLL机制、异步通知等概念。

    这些概念无论是对驱动开发,还是对应用开发,都很重要。
    所以,对于初学者,我建议必须学习这几个驱动:LED、按键、中断。

    入门之后,如果你想从事内核开发、驱动开发,那么可以去钻研几个驱动程序(输入系统、I2C总线、SPI总线等),
    掌握若干个大型驱动程序后,你对内核的套路就有所了解了,
    再去研究其他部分(比如进程管理、文件系统)时你会发现套路是如此通用。
    摄像头(VL42)、声卡ALSA驱动是Linux中比较复杂的2类驱动,它们是很难的,如果工作与此相关再去研究。

    =================【根文件系统】===================================
    应用程序是怎么启动的?要了解一下根文件系统
    你辛辛苦苦写出了应用程序,怎么把它放到板子上,让它开机就自动启动?
    你写的程序,它依赖于哪些库,这些库放到板子上哪个目录?
    怎么做一个可升级的系统?即使升级中途断电了,也要保证程序至少还可以运行老的版本?
    这些都需要我们了解一下根文件系统。
    先了解一下init进程:它要读取配置文件,根据配置文件启动各个APP。
    了解了init进程,你就了解了根文件系统的组成,就可以随心所欲裁剪系统,为你的项目制作出最精简的系统。
    ===============【应用层】=====================================
    要学习Linux应用程序吗?先学一些基础技能
    基本设备的访问,比如LCD、输入设备
    进程、线程、进程通信、线程同步与互斥
    休眠-唤醒、POLL机制、信号网络编程

    ①②③部分的知识,跟驱动有密切的关系,它们是相辅相承的。
    掌握了基本驱动开发能力、基本应用开发能力之后,在工作中你就可以跟别人友好沟通了,不至于一脸懵逼。

    =================【学习方法】==================================
    嵌入式涉及的东西太多太杂了,如果心里没有主线,碰到什么都要去研究个透彻,最终反而忘记自己要学什么了。
    嵌入式涉及硬件知识、软件知识,软件里涉及汇编、ARM架构、C语言、Makefile、Shell;
    又分为bootloader、内核、驱动、基本的APP、GUI。
    比如我们会用到Makefile,了解它的基本规则,会用我们提供的Makefile就可以。
    不需要深入研究那些make函数,因为在工作中都有现成的Makefile给你使用,不需要自己去编写一套Makefile。
    何必花上好几天去深入研究它呢?

    比如我们会用到bootloader,难道又要花上几个月来深入研究u-boot吗?
    工作中基本不需要改u-boot,会用那几个命令就可以。

    甚至有些学员先去买本shell的书来学习shell命令,何必?我们在视频中用到什么命令,你不懂时再去百度一下这些命令就可以了。

    不要脱离初学者的主线:应用基础、驱动基础。有了这2个基础后,你想深入研究某部分时,再去花时间吧。


    但是要理清楚思路,你写这个程序要完成什么功能、怎么实现这些功能?这个要弄清楚。
    有了思路后再写代码,不知道怎么写?没关系,看看视频,看看示例,然后关闭视频看看能否自己写出来。

    每个行业都有自己的业务逻辑,在掌握基本的编程能力之一,你需要结合具体的业务去深入学习。

    =========================================================

    知行合一
  • 相关阅读:
    SQL——索引
    const 与 readonly知多少
    ASP.NET MVC 4 RC的JS/CSS打包压缩功能
    学习IIS & MVC的运行原理
    IIS中使用ASP.NET MVC的经验总结
    cookie 和session 的区别详解
    SQL之经典语句
    SQL存储过程,使用事务(try catch),游标
    深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
    Sql效能优化总结(续)- sql语句优化篇
  • 原文地址:https://www.cnblogs.com/grooovvve/p/14438930.html
Copyright © 2011-2022 走看看