Linux入门

Linux系统框架

初学者首先要搞清楚的三个文件

  • 三个文件
    • 引导程序(bootloader):uboot.bin/uboot.imx
    • Linux内核镜像:zImage
    • system.img/rootfs.tar.ba2
  • 初期很多工作都是围绕这三个知识点展开的
    • 开发环境搭建/编译系统/烧写系统
  • 不同的系统文件名会有差异
  • 设备树文件(从Linux内核中分离出来的,可以看成Linux内核的一部分)

引导程序(bootloader):uboot.bin/uboot.imx

  开发板上电之后,首先执行的程序。bootloader有很多中,用的最多的是uboot,它编译出来的可执行文件是uboot.bin,该文件会烧写到板子中;有的开发板会打包成别的形式,比如uboot.imx。
  bootloader在执行到最后的时候,会引导Linux内核。

Linux内核镜像:zImage

  Linux内核编译出来之后,就是zImage,这个文件会烧写到开发板。Linux系统启动到最后,会去挂在文件系统。

文件系统镜像:system.img/rootfs.tar.ba2

文件系统可大可小,可以是最小系统,也可以是很大的系统(比如安卓), 对于文件系统的名称,不同的系统有不同的叫法,有的叫system.img,有的是rootfs。

BootLoader引导程序
(uboot.bin)
Linux内核(ZImage)
文件系统(system.img)

Linux应用程序框架

  • 应用程序编程即Linux系统编程
  • Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用
  • 基于Linux内核之上,基于‘系统调用’或者库函数的编程
  • 系统调用由操作系统核心提供,运行于核心态:而普通的函数调用由函数库或者用户自己提供,运行于用户态
  • ‘系统调用’在ARM系统中一般用‘软中断’的方式来实现(可以参考ARM体系结构相关课程)
  • ARM处理器的工作模式:
    • 用户模式
    • 系统模式
    • 中断模式
内核态
用户进程 用户态
Linux内核
系统调用
应用程序
C库函数
  • 包含丰富的内容(可参照‘系统调用’清单)
    • 文件IO
    • 多线程
    • 多进程
    • 网络SOCKET编程
    • 时间函数、文件系统操作
    • 用户管理、内存管理

文件IO

  • 一些皆文件(串口/LED等)
  • 文件I/O(对应串口等的read/write)实际就是对文件的读写操作。
    • open()
    • read()
    • write()
    • ioctl()
    • close()
    • 文件描述符(句柄)fd=open("目录文件“);
  • 标准I/O(带缓冲的I/O)
    • 可以移植更好,因为在系统接口的基础上更抽象了一步。
    • 与文件I/O的区别:文件I/O直接使用系统调用接口/系统IO
    • 而标准接口/标准IO,则是建立在系统IO和标准C库上的,诸如:
      • fopen()
      • fread()
      • fwrite()

Linux文件I/O(五种I/O模型)

  • 阻塞
  • 非阻塞
  • 信号
  • 多路复用
  • 异步
    在这里插入图片描述
    串口是慢速(相对于CPU)设备
  1. 可以一直等着(阻塞式)
  2. 读完当前就走(非阻塞式)
  3. 发送一个请求,数据到了之后内核发送一个信号,然后再过去读(信号驱动IO模型)
  4. 读数据的事全部交给内核,内核读完之后再通知已完成(异步IO)
  5. IO多路复用

Linux多进程

  • 多进程是多任务在Linux上的具体实现,多任务是操作系统的基本功能。
  • 进程的三种状态:就绪、阻塞、运行
线程处理
阻塞结束
时间片用尽
等待IO或
其他任务
被选中
就绪
阻塞
运行
xx
创建
退出
  • 就绪:被创建后,时间片耗尽后,进入就绪态。就是线程等待CPU进行处理
  • 阻塞:就是线程等待其他阻塞式任务完成
  • 运行:CPU给予进程时间片,在时间片内对其进行处理。

Linux多进程2

  • fork():字面意义上看,就是分岔的意思
  • 进程间通信
    • 管道(匿名管道和命名管道)
    • 信号
    • 信号量
    • 消息队列
    • 共享内存
    • 套接字
      在这里插入图片描述

Linux多线程

  • 单个县城内可以运行多个线程,线程是操作系统时间片调度的最小单位,线程可以看作循环执行的程序。
  • 每个线程可使用进程的全局变量
  • 线程生成函数:pthread_create()
  • 线程同步(公用资源,合理分配资源的方式)
    • 互斥锁
    • 条件变量
    • 读写锁
    • 信号量
      在这里插入图片描述

网络通信(socket编程)

  • 网络通信是重点
  • 很多操作系统的网络编程方式是一样的,都采用了socket方式(统一度很高!)
  • socket直译:插座
    在这里插入图片描述

Linux应用编程框架

  • 框架式学习
  • 逐步细化
  • 问题:什么时候用进程,什么时候用线程?
  • 在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值