Linux操作系统的基础知识

这是一篇关于关于嵌入式Linux操作系统知识点的文章,希望通过此,大家能温故了解Linux和嵌入式的知识点概念。

1. Linux系统组成

用户角度:由内到外,依次是:内核-》系统程序(工具)-》shell-》用户工具;
开发者角度:分两部分,软件与硬件:硬件是基础,软件包括两部分:系统软件和用户软件,其中系统软件包含驱动程序。系统软件主要实现对系统软、硬件资源的管理,用户软件主要根据具体需求实现相应功能。
静态角度:以PC为例的话,包括:BIOS、Grub、内核、根文件系统;以嵌入式系统为例的话,包括:Bootloader、内核、根文件系统。

2. Linux文件系统主要目录作用:

  • /bin:普通命令;
    /sbin:系统命令;
    /lib:动态库默认位置;
    /dev:设备文件目录;
    /etc:配置文件所在目录;
    /root:root用户所在目录;
    /home:普通用户所在目录

3. linux常见命令:

  • ls:查看目录文件或其属性;
    cp:拷备
    rm:删除
    mv:剪切、重命名
    tar:打包、压缩、解压、拆包,常用操作:
    打包压缩:tar -jcvf file.tar.bz2 file //注:前面的”-”也可省掉,采用bsd模式
    tar -zcvf file.tar.gz file
    解压拆包:tar -jxvf file.tar.bz2
    tar -zxvf file.tar.gz
    man:查系统命令、库函数等
    tab:用于自动补齐文件名
    ---------------------------------------------------------------------

4. 嵌入式系统概念:以应用为中心、以计算机技术为基础,软、硬件可裁剪,对性能、可靠性、功耗、体积等有严格要求的专用计算机系统。

5. 静态角度看嵌入式Linux系统构成:bootloader、内核、根文件系统

6. 本地开发:在一种平台上完成编辑、编译、调试、运行的开发模式; 交叉开发:在一种平台上完成编辑、编译、调试,在另一种平台上运行的开发模式。通常采用的模式为宿主机——目标机。

7. 嵌入式系统软件分类:系统软件、应用软件。前者用于完成系统软、硬件资源,后者用于满足用户具体应用需求。

8. 常用交叉工具:arm-linux-gcc/as/ld/ar等。

9. 嵌入式Linux系统在emmc上布局:最开头部分放置bootloader,然后放置内核,通常内核与bootloader之间会空一些区域用于存放系统启动参数,其他区域放置根文件系统或其他扩展文件系统。

10. gcc编译四个阶段:预处理、编译、汇编、链接。

  • 预处理:gcc -E -o hello.i hello.c
    编译: gcc -S -o hello.s hello.i
    汇编: gcc -c hello.s -o hello.o
    链接: gcc hello.o -c hello
    执行: ./hello

11. 采用gdb调试程序时,在编译程序时需使其包含调试信息,编译时需加“-g”选项。

12. bootloader概念:在系统启动前或应用程序执行前,首先执行的一小段代码。

13. bootloader作用:初始化硬件,建立内存映射,为系统启动准备环境。

14. bootloader不属于内核,其与平台相关的代码采用汇编编写,该部分程序不具备可移植性。

15. ARM上电后从0地址开始执行。因此,需将uboot映射到0地址处。

16. bootloader程序分两阶段:汇编、C。前者完成模式切换、关MMC、看门狗、中断等,初始化时钟、内存、可信域,拷备uboot部分代码,设置栈,跳到C部分(board_init_f());汇编阶段初始化本阶段所需硬件,等一小会(要么进uboot系统,要么设置内核参数、启动内核)。

---------------------------------------------------------------------

    1. uboot常用命令:
    1. help; //查命令集,查具体命令
    2. mmc类命令:
    3. 环境变量类:setenv、editenv、saveenv、printenv(pri)
    4. 命令序列定义:用setenv定义,命令序列用双引号括起,各命令用分号分隔。
      命令序列运行:run 命令序列变量名

18. 与内核启动相关的两个重要环境变量:

  • bootcmd:自启动命令序列;
    bootargs:自启动命令参数;以实验时bootargs取值为例,详细说明每一段的作用。
    “root=/dev/nfs” --告诉内核根目录是网络中的共享
    “nfsroot= s e r v e r i p : / o p t / r o o t f s ” − − 共享的目录在哪里“ i p = serverip:/opt/rootfs” --共享的目录在哪里 “ip= serverip:/opt/rootfs共享的目录在哪里ip=ipaddr” --开发板的ip地址
    “ethmac=$usbethaddr” --开发板的mac地址
    “console=ttySAC0,115200” --内核启动时,信息向哪里打印,ttySAC0指的是开发板的串口0。
    “init=/sbin/init” --告诉内核,内核启动后,第一个要启动的程序是什么,也就是1号进程。

  • bootdelay:自启动延迟时间

19. 内核配置4种方法:make config、make menuconfig、make gconfig、make xconfig

20. 内核配置操作:三选一、二选一、字符串,以及各自采用的括号。

21. 内核最终配置文件为:.config

22. 内核编译:make,可用选项:-jn,采用n线程;v=1,完整信息输出;重定向

23. Linux内核编译的最终结果:zImage,位置在arch/arm/boot下,是一个可执行文件。

24. Linux内核配置系统三部分:Makefile、Kconfig、以及配置工具。其中,Makefile和Kconfig通过.config文件联系起来。

25. zImage生成过程:(理解),执行make时,读取.config文件,根据其中的配置项,再由Makefile对相应目录下源文件进行编译,生成*.o,之后对各目录下的*.o文件进行合并得到built-in.o,再对各个built-in.o文件进行链接,得到最原始的内核文件vmlinux,接着对vmlinux文件进行瘦身,去除调试信息、符号表等内容,进行格式转换(转成二进制),生成arch/arm/boot/Image文件,再接着利用gzip对其进行压缩,生成arch/arm/boot/compressed/piggy.gz文件,然后编译head.s、misc.s等文件,将piggy.o一起合并为压缩的、包含自解压工具的内核文件arch/arm/boot/compressed/vmlinux,之后再进行格式化转换得到zImage。

26. 根文件系统概念:存放运行、维护系统所必须的各种工具软件、库、配置文件及其他文件的地方。

27. 根文件系统构建方法:按照FHS标准创建目录,然后填充目录:填充命令(/bin、/sbin、/usr/bin、/usr/sbin)、填充库(/lib、/usr/lib)、填充/etc(initfs、inittab、profile)、填充/dev(null、console)

28. init执行完整流程:

挂载完根文件系统后,首先执行init程序,init程序读取inittab初始化列表,先执行其中动作为sysinit的命令,然后执行动作为wait的命令,接着once的命令;之后循环执行:respawned/askfirst的命令。具体:图片1.png

29. 模块概念:没有经过链接,不能独立执行的目标文件,链接后运行在内核空间。

特点:灵活;缺点:易破坏系统稳定性。

30. 模块入口声明:module_init();出口声明:module_exit()

31. 模块编译两种方法:树内、树外。

32. 编译方法:make或make modules

33. 模块命令:insmod、rmmod、lsmod、modinfo等

34. 驱动程序:内核通过驱动驾驭硬件,是内核与硬件之间的接口。

35. 设备分类:字符、块、网络设备。设备节点,即设备文件。位置在/dev目录下。

36. 设备号:一个具体的硬件,通过主、次设备号来表示。

37. 设备驱动三大数据结构:file_operations、file、inode

38. 字符设备注册:

  • 早期方法:
    注册:register_chrdev()
    注销:unregister_chrdev()
    新方法:
    新申请、注册设备号,再申请cdev结构,注册字符设备。
    设备号申请与注册:
    register_chrdev_region() //设备号已知
    alloc_chrdev_region() //设备号未知
    注销:unregister_chrdev_region()
    设备申请与注册:
    cdev_alloc()
    cdev_init()
    cdev_add()
    注销:cdev_del()

39. 手动创建设备文件:mknod 文件名 类型 主设备号 次设备号

40. 设备号:dev_t类型数据,高12位主设备号,低20位次设备号

宏: MAJOR()、MINOR()、MKDEV()

41. 自动创建设备文件:

class_create()
device_create()
销毁:
device_destroy()
class_destroy()

42. 虚地址概念:操作系统启动MMU后,CPU经MMU获取的地址。

实地址概念:物理地址。

43. 地址映射:

  • 建立映射: 虚地址=ioremap(实地址,大小)
    取消映射: iounmap(虚地址)

44. 并发:真并发、伪并发,及原因。

45. 临界区的概念:会产生并发访问,且包含共享资源的代码段。

46. 原子操作:整型原子操作、位原子操作。仅用于保证这两种类型的变量在进行操作时具有不可分割性。

47. 死锁:单进程死锁、多进程多资源死锁。

48. 其他同步:自旋锁、读写自写锁、信号量、读写信号量、互斥体,掌握各种同步方法的特点。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林同学_ioT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值