首页 > 其他分享 >嵌入式操作系统

嵌入式操作系统

时间:2022-10-18 22:03:27浏览次数:63  
标签:tar make 编译 嵌入式操作系统 内核 hello 设备

这是一篇关于关于嵌入式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不属于内核,其与平台相关的代码采用汇编编写,该部分程序不具备可移植性。

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

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

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

17. uboot常用命令:

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

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

bootcmd:自启动命令序列; bootargs:自启动命令参数;以实验时bootargs取值为例,详细说明每一段的作用。 “root=/dev/nfs” --告诉内核根目录是网络中的共享 “nfsroot=$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

掌握make menuconfig配置方法。 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()

  1. 手动创建设备文件:mknod 文件名 类型 主设备号 次设备号
  2. 设备号:dev_t类型数据,高12位主设备号,低20位次设备号 宏: MAJOR()、MINOR()、MKDEV()
  3. 自动创建设备文件: class_create() device_create() 销毁: device_destroy() class_destroy()
  4. 虚地址概念:操作系统启动MMU后,CPU经MMU获取的地址。 实地址概念:物理地址。
  5. 地址映射: 建立映射: 虚地址=ioremap(实地址,大小) 取消映射: iounmap(虚地址)
  6. 并发:真并发、伪并发,及原因。
  7. 临界区的概念:会产生并发访问,且包含共享资源的代码段。
  8. 原子操作:整型原子操作、位原子操作。仅用于保证这两种类型的变量在进行操作时具有不可分割性。
  9. 死锁:单进程死锁、多进程多资源死锁。
  10. 其他同步:自旋锁、读写自写锁、信号量、读写信号量、互斥体,掌握各种同步方法的特点。

标签:tar,make,编译,嵌入式操作系统,内核,hello,设备
From: https://blog.51cto.com/u_15682126/5768246

相关文章