嵌入式
Sponsored Links
This presentation is the property of its rightful owner.
1 / 60

嵌入式 系统 An Introduction to Embedded System 浙江大学计算机学院 2012 年 4 月 PowerPoint PPT Presentation


  • 184 Views
  • Uploaded on
  • Presentation posted in: General

嵌入式 系统 An Introduction to Embedded System 浙江大学计算机学院 2012 年 4 月. 第 4 课 嵌入式 Linux 开发基础. Linux 准备知识. Linux 的文件系统 常用的 Linux 命令及使用 Linux 下的 Shell Linux 下的编译器 GCC 认识 Makefile. 嵌入式 Linux 简介. Linux. 嵌入式开 发领域. 稳步发展. 许多 Linux 改良品种迎合了嵌入式市场,它们包括:. RTLinux.

Download Presentation

嵌入式 系统 An Introduction to Embedded System 浙江大学计算机学院 2012 年 4 月

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


嵌入式系统

An Introduction to Embedded System

浙江大学计算机学院

2012年4月


第4课 嵌入式Linux开发基础


Linux准备知识

  • Linux的文件系统

  • 常用的Linux命令及使用

  • Linux 下的 Shell

  • Linux 下的编译器 GCC

  • 认识 Makefile


嵌入式 Linux 简介

Linux

嵌入式开

发领域

稳步发展

  • 许多 Linux 改良品种迎合了嵌入式市场,它们包括:

RTLinux

  • 虽然大多数 Linux 系统运行在 PC 平台上,

    但 Linux 也可以作为嵌入式系统的操作系统。

  • 嵌入式 Linux 标准吸引了“Linux 标准库”以及

    UNIX 组织中有益的元素

  • 在嵌入式系统上运行Linux的一个缺点是Linux

    体系提供实时性能需要添加实时软件模块

uCLinux

Montavista

Linux

ARM-Linux

其他Linux系统


Debian

Suse

MEPIS

Redhat/

Fedora

Mandrake

Ubuntu

常用的Linux发行版

发行版

发行版

发行版

  • Linux 是一个操作系统中的内核。一个完整的操作系统不仅仅是内核而已。所以,许多个人、组织和企业,开发了基于 GNU/Linux 的 Linux 发行版。


Linux下的文件类型

  • 普通文件

  • 目录文件

  • 连接文件

  • 设备文件


普通文件

  • 系统文件

    • .conf: 配置文件,也用.cfg

    • .lock:锁文件,用来判定程序或设备是否正在被使用

    • .rpm: RedHat用来安装软件的软件包管理器文件

  • 编程和脚本文件

    • .c .cpp .h .o .pl(Perl脚本) .py(Python 脚本) .so(库文件) .sh(shell脚本) .tcl(TCL脚本)


普通文件

  • 文件格式

    • .au(音频文件) .gif .html/.htm .jpg .pdf .png(PNG(Portable Network Graphic,可移植网络图形)文件) .ps(PostScript文件) .txt .wav .xpm(图像文件)

  • 压缩以及归档文件

    • .bz2(使用bzip2压缩的文件) .gz(使用gzip压缩的文件) .tar(使用tar归档的文件) .tbz(使用tar和bzip压缩的文件) .tgz(使用tar和gzip压缩的文件) .zip(使用ZIP压缩的文件)

  • 察看一个没有扩展名的文件的类型,可以使用file命令,file filename


  • 目录文件 (directory)

    • 目录中包含文件以及下级子目录,但目录也是文件。这个文件中记录了包含在它中的文件和子目录的名称与它所处的地址。

    • 一个文件本身的记录不包含文件名,对文件名进行的更改,实际是修改它上一层的目录文件中的一条文件记录

  • 连接文件 (link)

    • 连接是Linux中比较特殊而非常有用的一种文件,类似于Windows中的快捷方式,它本身不包含任何内容,它指向别的文件或目录


  • 设备文件

    • Linux下所有的设备都是通过文件来表示的,所有的设备文件都存放在/dev目录下,设备文件的文件名就是设备名

      $cd /dev

      $ls

    • 设备文件的种类

      • 块设备文件:/dev/hda1,这些设备以块为最小单位。块的大小随设备不同而不同,一般将一块定义为1kB

      • 字符设备: /dev/ttyS0,字符设备按顺序一个一个传递字符

      • 网络接口: /dev/eth0, 由内核中的网络系统驱动,负责发送和接收数据包

    • 文件名通常是尾部带有设备编号数字的缩写名称。


Linux下的文件详细信息

-rw-r--r-- 1 root root 15228 2003-01-25 a2ps.cfg

-rw-r--r-- 1 root root 2562 2003-01-25 a2ps-site.cfg

-rw-r--r-- 1 root root 47 12月 26 23:39 adjtime

drwxr-xr-x 2 root root 4096 2005-05-16 aep

-rw-r--r-- 1 root root 688 2003-02-04 aep.conf

文件权限

文件上次被修改的时间和日期

文件类型

文件属主名

文件长度

用户分组名

链接个数

文件名


/usr

/local

/bin

/src

/bin

/var

/lib

/etc

/bin

/man

/lib

/dev

/etc

/tmp

/

/home

/usr1

/usr2

/usr3

/mnt

/root

/up-armmp3

/up-netarm2410

/proc

/sbin

Linux下的目录结构

  • linux采用的是树型结构。最上层是根目录,其他的所有目录都是从根目录出发而生成的。微软的DOS和windows也是采用树型结构,但是在DOS和windows中这样的树型结构的根是磁盘分区的盘符,有几个分区就有几个树型结构,他们之间的关系是并列的。


Linux下的目录结构

  • /bin 二进制可执行命令/dev 设备文件/etc 系统管理和配置文件/etc/rc.d 启动的配置文件和脚本/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序/tmp 公用的临时文件存储点/root 系统管理员的主目录/mnt 让用户临时挂载(mount)其他的文件系统。/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下的.chk)放在这里/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。/var 某些大文件的溢出区,比方说各种服务的日志文件


Linux下的目录结构

  • /usr是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含:/usr/X11R6 存放X window的目录/usr/bin 众多的应用程序/usr/sbin 超级用户的一些管理程序/usr/doc linux文档/usr/include linux下开发和编译应用程序所需要的头文件/usr/lib 常用的动态链接库和软件包的配置文件/usr/man 帮助文档/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里/usr/local/bin 本地增加的命令/usr/local/lib 本地增加的库


Linux 源代码的目录内容

/Documentation

  • 这个目录下面只有内核文档

/arch

  • 所有子目录中都是体系结构相关的代码

/drivers

  • 包括显卡、网卡、SCSI 适配器等

/fs

  • 文件系统在该目录下面都有对应的子目录

/include

  • 包含了 Linux 源程序树中大部分的.h 文件

  • 这个目录下面只有两个文件

/init

  • 这个目录下的文件实现了进程间通讯

/ipc

  • 包含了实现平台独立的基本功能

/kernel

  • 这个目录包含两部分的内容

/lib

  • 包含了体系结构无关的内存管理代码

/mm

/net

  • 包含了 Linux 应用的网络协议代码

/scripts

  • 它包含了用来配置内核的脚本


Shell 简介

  • Shell 是一种具备特殊功能的程序,它是介于使用者和 UNIX/Linux 操作系

    统核心程序(kernel)之间的一个接口。

  • 在系统起动的时候,核心程序会被加载内存,负责管理系统的工作,直到系

    统关闭为止。它建立并控制着处理程序,管理内存、档案系统、通讯等等。

    而其它的程序,包括 shell 程序,都存放在磁盘中。核心程序将它们加载

    内存,执行它们,并且在它们中止后清理系统。

  • 一个 shell 命令档很像是 DOS 下的批次档(如 Autoexec.bat):它把一

    连串的 UNIX 命令存入一个文档,然后执行该文档。

使用者

Shell

UNIX/Linux

操作系统


Shell 的发展历史

  • Bourne shell 是标准的 UNIX shell

  • 以前常被用来做为管理系统之用

  • 大部份的系统管理命令文件, rc

    start、stop 与 shutdown 都是

    Bourne shell 的命令档

  • 在单一使用者模式下以 root 签入

    时它常被系统管理者使用

  • C shell 是柏克莱大学所开发的,且

    加入了一些新特性:

    • 命令列历程

    • 别名

    • 内建算术

    • 档名完成

    • 工作控制

  • C shell 提示符号的默认值是%

  • Korn shell 是 Bourne shell 的超集,由 AT&T 的 David Korn 所开发。

  • 它增加了一些特色,比 C shell 更为先进。

  • Korn shell 的特色包括了可编辑的历程、别名、函式、正规表达式、万用

  • 字符、内建算术、工作控制、共作处理和特殊的除错功能。


Shell 的使用

Shell

主要功用

主要功用

解译指令

提供环境

  • Shell 语法分析命令行,把它分解成

    以空白区分开的符号,在此空白包括:

  • Tab 键

  • 空白

  • 换行

  • Shell也能当解译性的程序语言,Shell 程序,通常叫做

    命令文件,它由列在档案内的命令所构成

  • Shell 的另一个重要功用是提供个人化的使用者环境,这通常在

    shell 的初始化档案中完成


  • Shell 的功能

    • 为了确保任何提示符号下输入的命令都能够适当地执

      行。shell 担任的工作包括有:

    包括

    Shell

    • 读取输入和语法分析命令列;

    • 对特殊字符求值;

    • 设立管线、转向、和幕后处理;

    • 处理讯号;

    • 设立程序来执行。


    常用的Linux命令及使用

    • Linux 的系统管理主要在控制终端下进行,通过使用

      命令行的方式进行管理。

    • Linux 的文件命令可以完成各种复杂的工作:

      • 对目录进行复制

      • 目录移动

      • 目录链接

      • 搜索和查找文件

      • 搜索和查找目录

      • 阅读文件内容

      • 显示文件内容

      • 打印文件内容

    ls

    chown

    passwd

    pwd

    chmod

    touch

    mv

    mkdir

    cp

    clear

    cal

    write

    cat

    cd

    tar

    shutdown

    echo

    rm

    mesg

    查看系统


    帮助

    • 如何获取帮助信息

      • 使用man命令查看手册

        • 权限:所有用户

        • 使用方法:man [查找内容]

        • 说明:打印出需要查找帮助内容的手册页信息

      • 使用“ -- help”或“-help”参数

        • 权限:所有用户

        • 使用方法:[命令] --help

        • 说明:打印出需要查找帮助命令的帮助信息,根据命令不同可能采用不同的参数“--help”或“-help”


    基本命令

    • date

      • 权限:所有用户

      • 使用方法:date

      • 说明:显示系统时间

      • 应用示例:

        $ date

  • exit

    • 权限:所有用户

    • 使用方法:exit

    • 说明:图形模式下exit为关闭一个终端窗口

    • 应用示例:

      $ exit


  • 基本命令(二)

    • who

      • 权限:所有用户

      • 使用方法:who

      • 说明:确定系统上的用户

      • 应用示例:

        $ who

  • ps (process)

    • 权限:所有用户

    • 使用方法:ps

    • 说明:列出所有的进程

    • 应用示例:

      $ ps


  • 基本命令(三)

    • passwd

      • 权限:当前用户

      • 使用方法:passwd

      • 说明:更改密码

      • 应用示例:

        $ passwd

  • file

    • 权限:所有用户

    • 使用方法:file [文件名]

    • 说明:判断文件类型

    • 应用示例:

      $ file xx.c


  • 基本命令(四)

    • reboot

      • 权限:所有用户

      • 使用方法:reboot

      • 说明:重启系统

      • 应用示例:

        $ reboot

  • halt

    • 权限:所有用户

    • 使用方法:halt

    • 说明:关闭系统

    • 应用示例:

      $ halt


  • 基本命令(五)

    • su (super-user)

      • 权限:所有用户

      • 使用方法: su [用户]

      • 说明:以替代用户身份执行命令

      • 应用示例:

        $ subc

  • startx (start X Window)

    • 权限:所有用户

    • 使用方法:startx

    • 说明:文本方式下启动图形界面

    • 应用示例:

      $ startx


  • 基本命令(六)

    • which

      • 权限:所有用户

      • 使用方法:which [程序名]

      • 说明:寻找实用程序所在位置

      • 应用示例:

        $ which who

  • echo

    • 权限:所有用户

    • 使用方法:echo [显示内容]

    • 说明:将一行字显示到标准输出

    • 应用示例:

      $ echo this is a echo test


  • 浏览目录常用命令

    • pwd 命令 (print working directory)

      • 权限:所有用户

      • 使用方法:pwd

      • 说明:显示用户当前工作子目录的完整路径

      • 应用示例:

        $ pwd


    浏览目录常用命令

    • ls命令 (list)

      • 权限:所有用户

      • 使用方法:ls [选项]... [文件]...

      • 说明:列出当前工作子目录(默认)中的文件及子目录清单

      • 常用参数:

        -a 显示所有文件及目录(包括隐藏文件)(all)

        -l 显示文件的详细信息 (long)

        -h 以容易理解的方式打印文件大小(1k 32M 2G)

        -t 将文件按建立的先后次序列出 (time)

        -F 在列出的文件名称后加一个符号(可执行文件“*”,目录“/”)

      • 应用示例:

        $ ls -lh


    浏览目录常用命令

    • cd命令 (change directory)

      • 权限:所有用户

      • 使用方法:cd [目标路径]

      • 说明:变换工作目录到目标路径,其中目标路径可以是绝对路径也可以是相对路径。目标路径名可以缺省,若缺省则变换至使用者的home directory(用户登录子目录)。

      • 常用参数:

        ~ :home directory

        . : 当前目录

        . . : 当前目录的上一层目录

        -:返回切换目录后的前一个目录

      • 应用示例:

        $ cd /home/bc/

        $ cd ../../


    阅读常用命令

    • cat 命令 (concatenate)

      • 权限:所有用户

      • 使用方法:cat [参数] [文件名]

      • 说明:把文件串连接后输出到基本输出(或另一个文件)

      • 常用参数:

        -n或--number:由1开始对所有输出行数编号

        -b或--number-nonblank:与-n类似,只是不对空白行编号

  • 应用示例:

    $ cat –n textfile1 > textfile2

    (将textfile1的内容加上行数编号,写入textfile2中。如果textfile2已存在,则覆盖原有内容。

    $ cat text1 text2 >> text3

    (将text1与text2的内容串行放在一起,再附在text3文件的最后(不覆盖text3的原有内容。))


  • 阅读常用命令

    • more 命令

      • 权限:所有用户

      • 使用方法:more [参数] [文件名]

      • 说明:类似cat,但它可以分页显示,适合显示长文件清单或文本内容,最基本的指令就是按空格换页,按回车下一行,按b键返回上一页。

      • 常用参数:

        -num :一次显示的行数

        -d :在屏幕最下方显示提示信息

        +num:从第num行开始显示应用示例

      • 应用示例:

        $ more textfile


    目录操作常用命令

    • mkdir命令 (make directory)

      • 权限:所有用户

      • 使用方法:mkdir [子目录或子目录完整路径]

      • 说明:建立一个新的子目录,使用子目录的路径作为参数

      • 应用示例:

        $ mkdir /home/bc/temp

  • rmdir命令 (remove directory)

    • 权限:当前目录有适当权限的所有者

    • 使用方法:rmdir [参数] [子目录或子目录完整路径]

    • 说明:删除空的目录(当目录非空时,返回错误)

    • 应用示例:

      $ rmdir /home/bc/temp


  • 文件操作常用命令

    • wc命令 (word count)

      • 权限:当前文件有适当权限的所有者

      • 使用方法:wc [参数] [文件名]

      • 说明:统计文件中的单词数

      • 常用参数:

        -c:显示文件内的字符数 (character)

        -w:显示文件内以空格符分隔的字数 (word)

        -l:显示文件内的行数 (line)

      • 应用示例:

        $ wc –cl users

        (显示当前目录下的文件users的字符数和行数)


    文件操作常用命令

    • rm 命令(remove)

      • 权限:当前文件有适当权限的所有者

      • 使用方法:rm [参数] [文件名或目录]

      • 说明:删除文件以及 目录

      • 常用参数:

        -i:删除前逐一询问确定 (inform)

        -f: 即时原文件为只读也强制删除,并不询问确定 (force)

        -r:同时删除该目录层下的所有目录和文件 (recursive)

      • 应用示例:

        $ rm textfile

        (删除当前目录下的textfile文件)

        $ rm –rf /home/bc/temp

        (删除/home/bc/temp目录以及其下的所有目录和文件)


    文件操作常用命令

    • mv 命令 (move)

      • 权限:当前文件有适当权限的所有者

      • 使用方法:mv [参数] [原文件或目录] [目标文件或目录]

      • 说明:将一个文件移至另一个文件,或将多个文件移动至另一个目录,也可以将一个目录移动至另一个目录

      • 常用参数:

        -i:若目的位置已有同名文件,则询问是否覆盖旧文件

      • 应用示例:

        $ mv text1 text2

        (将当前目录下的文件text1的内容复制到text2中并删除text1。如果text2已存在,则覆盖其中的原有内容)

        $ mv –i *.c /home/bc/temp

        (将当前目录下的所有以.c为后缀的文件移至/home/bc/temp目录下)


    文件操作常用命令

    • cp 命令 (copy)

      • 权限:所有用户

      • 使用方法:cp [参数] [原文件或目录] [目标文件或目录]

      • 说明:将一个文件复制到另一个文件,或将数个文件复制到另一个目录中,也可以将一个目录复制到另一个目录

      • 常用参数:

        -a:尽可能将文件的状态、权限等信息全部复制 (all)

        -f: 若目的地址有同名文件,则将已有的文件删除再进行复制 (force)

        -r:若原目录中包含子目录,则原目录中的文件及子目录也依次复制到目的地址中 (recursive)

      • 应用示例:

        $ cp text1 text2

        (将文件text1的内容复制到text2中。如果text2已存在,则覆盖其中的原有内容)

        $ cp –arf up-tech/ /temp

        (将当前目录下的up-tech/目录中的所有内容复制到/temp目录下)


    文件操作常用命令

    • sort 命令

      • 权限:所有用户

      • 使用方法:sort [参数] [文件名]

      • 说明:将文本文件数据排序

      • 常用参数:

        -u:输出结果中去掉重复的行 (unique)

        -r: 以相反顺序排序 (reverse)

        -o:将排序后的结果写入文件(>)(output)

        -n: 把行中的第一个字段当作数值,数据按算术方法排序 (numeric)

      • 应用示例:

        $ sort –rn data

        (将data文件每行以相反算术顺序排序,并显示在当前的用户终端上(不改动原文件))


    文件操作常用命令

    • chmod命令 (change mode)

      • 权限:所有用户

      • 使用方法:chmod [+|-模式] [文件]

      • 说明:改变文件模式

      • 常用参数:

        +-r:修改读模式 (增加(+)或去除(-)可读(read)权限)

        +-w:修改写模式 (增加(+)或去除(-)可写(write)权限)

        +-x:修改执行模式 (增加(+)或去除(-)可执行(execute)权限)

      • 应用示例:

        $ chmod +x users

        (将users文件或目录增加可执行权限)


    文件操作常用命令

    • chown命令 (change owner)

      • 权限:根用户

      • 使用方法:chown [参数][所有者] :[组] [文件或目录]

      • 说明:改变文件的所有者

      • 常用参数:

        -R:以递归方式处理目录下所有文件 (recursive)

      • 应用示例:

        $ chownjessie:users file1.txt

        (将档案 file1.txt 的拥有者设为 users组的用户 jessie )


    压缩及解压缩命令

    • tar 命令

      • 权限:所有用户

      • 使用方法:tar [参数] [归档文件名] [原文件或目录]

      • 说明:将文件及目录复制到归档文件中,

      • 常用参数:

        -c:创建文档(create)

        -f:表示存档到文件而非磁盘(file)

        -v:显示每个复制文件的名称(verbose)

        -x:解压缩

        -z:使用gzip或ungzip

        -j:使用bz2

      • 应用示例:

        $ tar cvjf temp.tar.bz2 temp/

        (将当前目录下的temp/目录包含的所有内容归档并用bz2压缩到temp.tar.bz2文件中)

        $ tar xvjf temp.tar.bz2

        (将当前目录下的temp.tar.bz2文件解压缩)


    挂载文件系统命令

    • mount 命令

      • 权限:所有用户

      • 使用方法:mount [参数] [设备] [挂载目录(挂载点)]

      • 说明:在命令行中使用mount命令挂载文件系统

      • 常用参数:

        - t :指定挂载文件系统类型

      • 应用示例:

    adfs, affs, autofs, coda, coherent, cramfs, devpts, efs, ext, ext2, ext3, hfs, hpfs, iso9660, jfs, minix, msdos, ncpfs,nfs, ntfs, proc, qnx4, ramfs, reiserfs, romfs, smbfs, sysv,tmpfs, udf, ufs, umsdos, vfat, xenix, xfs, xiafs.

    #mount -t nfs 192.168.0.43:/home/wj /mnt/nfs/

    (将IP地址为192.168.0.43的计算机上的/home/wj目录

    以NFS的文件系统类型挂载为/mnt/nfs/


    卸载mounted文件系统命令

    • umount 命令

      • 权限:所有用户

      • 使用方法:umount [参数] [设备] [挂载目录(挂载点)]

      • 说明:将指定的文件系统从系统文件结构中卸载

      • 常用参数:

        -V:显示umount程序版本信息 (Version)

        -v :输出详细信息 (verbose)

        -t vfstype:指定文件系统类型,只卸载该指定文件系统类型的文件系统

        应用示例:

        #umount mnt/nfs(卸载/mnt/nfs/。该命令执行后, mnt/nfs不再是一个有效路径)


    网络常用命令

    • ifconfig命令

      • 权限:所有用户

      • 使用方法:ifconfig [接口]

        接口是可选项,如果不加此项,则显示系统中所有网卡的信息。如果添加此选项则显示所指定的网卡信息

      • 说明:用来配置网络接口

      • 应用示例:

    # ifconfig eth0 192.168.0.102 (配置网卡eth0的IP地址)

    # ifconfig eth0 down (将网卡eth0禁用)

    # ifconfig eth0 up (将网卡eth0启用)


    NFS服务

    • NFS(Network File System)是由Sun公司开发的一套协议

      • 通过RPC(Remote Procedure Call)技术,使我们可以达到文件的共享,能够在多台计算机上透明的访问彼此间的目录。它们使用分布式文件系统方案来实现,在UNIX工作站和Linux系统下比较常见。

      • NFS使用mount命令来将远程的文件系统挂载到本机上的文件系统上,用户在使用时不会感觉到两者有任何差异。


    编辑模式

    工作模式

    Linux 下的编辑器 vi

    退出命令

    行号与文件

    字符串搜索

    命令模式

    删除正文

    正文替换

    插入模式

    恢复文件

    选项设置

    vi

    shell 切换

    vi

    vim 和 gvim 的高级特色


    Linux 下的编译器 GCC

    • 在使用 GCC 编译程序时,编译过程可以被细分为四个阶段:

      • 预处理(Pre-Processing);

      • 编译(Compiling);

      • 汇编(Assembling);

      • 链接(Linking)。

    预处理

    编译

    汇编

    链接

    • Linux 程序员可以根据自己的需要让 GCC 在编译的任何阶段结束,以便检

      查或使用编译器在该阶段的输出信息

    • GCC 提供了 30 多条警告信息和三个警告级别,使用它们有助于增强程序

      的稳定性和可移植性。


    认识 Makefile ---Makefile概述

    • make 命令对于构建具有多个源文件的程序有很大的帮助

    • 只有 make 命令还是不够的,还必须用 makefile 告诉它要做什么以及

      怎么做才行

    • make 命令和 Makefile 配合使用,能给我们的项目管理带来极大的便

    • 一个 makefile 由依赖关系和规则两部分内容组成

    Makefile

    依赖关系

    规则

    +

    =

    规则用来说明怎样使用所依赖的文件来建立目标文件

    依赖关系由一个目标和一组该目标所依赖的源文件组成


    认识 Makefile ---makefile 中的依赖关系

    • make 程序自动生成和维护通常是可执行模块或应用程序的目标,目标的状态

      取决于它所依赖的那些模块的状态。

    • Make 的思想是为每一块模块都设置一个时间标记,然后根据时间标记和依赖

      关系来决定哪一些文件需要更新。一旦依赖模块的状态改变了,make 就会

      根据时间标记的新旧执行预先定义的一组命令来生成新的目标。

    • 依赖关系规定了最终得

      到的应用程序跟生成它

      的各个源文件之间的关

    main: main.o f1.o f2.ogcc -o main main.o f1.o f2.omain.o: main.c def1.hgcc -c main.cf1.o: f1.c def1.h def2.hgcc -c f1.cf2.o: f2.c def2.h def3.hgcc -c f2.c


    认识 Makefile ---makefile 中的规则

    • makefile 规定相应的规则来描述如何生成目标,或者说使用哪些命令来根

      据依赖模块产生目标。

    • makefile 是以相关行为基本单位的,相关行用来描述目标、模块及规则三

      者之间的关系。一个相关行格式通常为:冒号左边是目标名;冒号右边是

      目标所依赖的模块名;紧跟着的规则是由依赖模块产生目标所使用的命令。

      相关行的格式为:

    目标:[依赖模块][;命令]

    习惯上写成多行形式

    目标:[依赖模块]

    命令

    命令


    嵌入式 Linux 开发

    • 嵌入式 Linux 开发模型

      • 嵌入式 Linux 简介

      • 嵌入式 Linux 开发流程

    • Bootloader、内核、文件系统

    • Linux 驱动开发

      • Linux 的设备驱动程序概述

      • 设备驱动的结构

      • Linux 设备驱动程序的分类


    嵌入式 Linux 开发流程

    建立

    开发环境

    配置

    开发主机

    建立引导

    装载程序

    bootloader

    下载Linux

    操作系统

    建立根

    文件系统

    发布产品

    烧写内核

    根文件系统

    应用程序

    开发

    应用程序

    建立应用程

    序的 Flash

    磁盘分区


    Bootloader、内核、文件系统

    Bootloader

    内核

    文件系统

    • Bootloader 就是在引导操作系统内核或用户应用程序之前运行的一段程序,其主要功能是完成处理器和周边电路正常运行所需要的初始化工作,建立内存空间

      的映射

    • 内核是 Linux 的心脏,它是在引导时装入的程序,用来提供用户层程序和硬件之间的接口,执行发生在多任务系统中的实际任务转换,处理读写磁盘的需求,处理网络接口等功能

    • 文件系统是Linux操作系统的重要组成部分,Linux文件具有强大的功功能文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构


    Linux 操作系统的引导程序

    • 为了满足 Bootloader 的专有性和灵活性需要,大多数 Bootloader 的代码

      都由 stage1 和 stage2两部分组成。

    嵌入式 Linux 的 Flash分区

    启动加载模式

    Bootloader 有两种操作模式

    下载模式


    Linux 内核

    • 对文件系统的读写进行管理

    • 管理程序的运行

    • 管理存储器

    • 管理输入输出

    • 管理网络

    Linux 内核

    任务

    进程调度

    内存管理

    • Linux 内核主要由 5 个子系

      统组成:

      • 进程调度(SCHED)

      • 内存管理(MM)

      • 虚拟文件系统(VFs)

      • 网络接口(NET)

      • 进程间通信(IPC)

    内核

    组成

    虚拟

    文件系统

    进程间

    通信

    网络接口


    Linux 内核各部分的工作机制

    • 一个进程就是处于执行期的程序

    • 通常进程还要包括其它资源

    • 执行线程简称线程,是进程中活动的对象

    进程调度

    • 内存管理子系统是操作系统的重要部分

    • 为了满足大于系统中物理能力的内存需要

    • 开发了虚拟内存这种策略

    • 通过在竞争进程之间共享内存的方式使系统

      显得拥有比实际更多的内存

    内存管理

    虚拟文件系统

    • VFS 是 Linux 内核中的一个软件层

    • 用于给用户空间的程序提供文件系统接口


    Linux 的设备驱动程序概述

    设备驱动

    • 设备驱动可以理解为操作系统的一部分,

    • 对于一个特定的硬件设备来说,其对应的

    • 设备驱动程序是不同的。

    • Linux 通过设备驱动程序为应用程序提供了统一抽象的接口,从而隐藏

      了大量不同设备之间的区别和细节。

    • 对设备初始化和释放;

    • 对设备进行管理,包括实时参数设置以及

      提供对设备的操作接口;

    • 负责应用程序和设备文件间的数据传输;

    • 检测处理设备出现的错误。

    • 在 Linux 操作系统中,

      驱动程序是操作系统内

      核与硬件设备的直接接

      口,它屏蔽了硬件的细

      节,是内核的一部分,

      完成以下功能:


    设备驱动的结构

    • 每个设备文件都有其文件属性,表

      示是字符设备还是块设备。

    • 另外每个文件都有两个设备号

      • 第一个是主设备号

      • 第二个是从设备号

    • 自动配置和初始化子程序

    • 服务与 I/O 的子程序

    • 中断服务程序

    设备驱动

    设备驱动程序的组成

    设备文件和设备号

    inode和 file 数据结构

    file_operations结构

    • 在系统内部,I/O 设备的存取通过一组固定的入口点来进行,这组入口点是由每个设备的驱动程序提供的。

    • inode 数据结构中存放磁盘上的一个文件或目录信息;

    • file 数据结构主要被与文件系统对应的设备驱动程序使用,它提供有关被打开的文件的信息。


    Linux 设备驱动程序的分类

    • 字符设备以字节为单位进行数据处理

    • 大多数字符设备仅仅是数据通道

    • 只能按顺序读/写,不支持随机读写

    字符设备

    • 块设备数据可以按可寻址的块为单位进行处理

    • 块设备也支持像文件一样被访问

    • 每一个块设备驱动程序都必须提供普通的文件

      操作接口

    块设备

    • 网络接口用于网络通信

    • 为了屏蔽网络环境中物理网络设备的多样性,

      Linux 对所有的物理设备进行抽象并定义了一

      个统一的概念,称之为接口

    网络设备接口


    Thanks!


  • Login