
嵌入式Linux应用开发
文章平均质量分 88
嵌入式Linux应用开发学习记录
。等等
这个作者很懒,什么都没留下…
展开
-
18. FrameBuffer 应用编程
FrameBuffer 就是帧缓冲,也就是一块内存,里面保存着一帧图像。是 Linux 系统中的一种显示驱动接口,它将显示设备进行抽象,屏蔽了不同显示设备硬件的实现,对应用层抽象为一块显示内存,允许上层应用程序直接对显示缓冲区进行读写操作,用户不必关系物理显存的位置等具体细节,这些由 FrameBuffer 设备驱动完成。对应的设备文件为 /dev/fdX,Linux 最多有 32 个。原创 2024-01-31 11:52:14 · 1173 阅读 · 0 评论 -
17. 使用 tslib 库
tslib 是专门为触摸屏设备所开发的 Linux 应用层函数库,并且是开源。tslib 为触摸屏驱动和应用层之间的适配层, 它把应用程序中读取触摸屏 struct input_event 类型数据(这是输入设备上报给应用层的原始数据)并进行解析的操作过程进行了封装,向使用者提供了封装好的 API 接口。tslib 从触摸屏中获得原始的坐标数据, 并通过一系列的去噪、去抖、坐标变换等操作,来去除噪声并将原始的触摸屏坐标转换为相应的屏幕坐标。bin: 一些 tslib 提供的小工具,用于测试触摸屏。原创 2024-01-29 22:19:47 · 1360 阅读 · 0 评论 -
16. 输入设备应用编程
常见的输入设备有鼠标、键盘、触摸屏、遥控器等,用户通过输入设备与系统进行交互。原创 2024-01-29 21:18:25 · 1155 阅读 · 0 评论 -
15. GPIO 应用编程
调用 poll 监视文件描述符上的 IO 状态变化,POLLPRI 表示有高优先级数据可读取,中断就是一种高优先级事件。这个代码就是需要将引脚配置为输入模式,并且是非中断模式。GPIO 也是通过 sysfs 方式进行操控的,在。原创 2024-01-26 18:20:58 · 900 阅读 · 0 评论 -
14.点亮 LED 灯
dev/目录下的设备文件(设备节点)/sys/目录下的属性文件具体使用哪种方式需要根据不同功能类型设备进行选择,有些设备只能通过设备节点进行操控,而有些设备只能通过 sysfs 方式进行操控;当然跟设备驱动具体的实现方式有关,通常情况下,一般简单地设备会使用 sysfs 方式操控,其设备驱动在实现时会将设备的一些属性导出到用户空间 sysfs 文件系统,以属性文件的形式为用户空间提供对这些数据、属性的访问支持,譬如 LED、 GPIO 等。原创 2024-01-25 21:20:31 · 751 阅读 · 0 评论 -
13. 高级IO
对于这个问题的答案,我们首先需要了解到,对于 mmap()函数来说,当文件成功被映射到内存区域时,这段内存区域(映射区)的大小通常是页大小的整数倍,即使参数 length并不是页大小的整数倍。另外,文件映射的内存区域的大小必须是系统页大小的整数倍,譬如映射文件的大小为 96 字节,假定系统页大小为 4096 字节,那么剩余的 4000 字节全部填充为 0,虽然可以通过映射地址访问剩余的这些字节数据,但不能在映射文件中反应出来,由此可知,使用存储映射 I/O 在进行大数据量操作时比较有效;原创 2024-01-25 16:47:14 · 836 阅读 · 0 评论 -
12.线程同步
线程局部存储在定义全局或静态变量时,使用 __thread 修饰变量,此时,每个线程都会拥有一份对该变量的拷贝,线程局部存储中的变量将一直存在,直到线程终止,届时会自动释放这一存储。如果解锁时有一个以上的线程阻塞,那么这些被阻塞的线程就会被唤醒,都会尝试对互斥锁进行加锁,加锁成功后,其他线程进行阻塞等待。也称为线程私有数据,就是为每个调用线程分别维护一份变量的副本,每个线程通过特有数据键(key)访问时,这个特有数据键都会获取到本线程绑定的变量副本,这样就可以避免变量成为多个线程间的共享数据。原创 2024-01-20 22:36:30 · 1044 阅读 · 1 评论 -
11. 线程
线程是参与系统调度的最小单位,它被包含在进程之中,是进程中的实际运行单位。一个线程指的是进程中的一个单一顺序的控制流,或者说是执行流,一个进程中可以创建多个线程,多个线程实现并发运行,每个线程执行不同的任务。原创 2024-01-05 21:34:45 · 994 阅读 · 0 评论 -
10. 进程间通信
信号量是一个计数器,与其它进程间通信方式不太相同,它主要用于控制多个进程或一个进程内的多个线程间对共享资源的访问,相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程也可以修改该标志,除了用于共享资源的访问控制外,还可以用于进程同步。消息队列是 UNIX 下不同进程之间实现共享资源的一种机制,UNIX 允许不同进程将格式化的数据流以消息队列形式发送给任意进程,有足够权限的进程可以向队列种添加信息,被赋予读权限的进程则可以读走队列中的消息。原创 2024-01-02 17:49:09 · 854 阅读 · 0 评论 -
9. 进程
如果忽略这个信号,终端退出时,进程不会退出。而进程是一个动态的概念,它是程序的一次运行过程,当应用程序被加载到内存中运行后,就被称为了一个进程,程序运行结束后,进程就会终止,这就是一个进程的生命周期。也需要通过一个特定的文件来实现,当程序启动后,首先打开该文件,以 O_WRONLY|O_CREAT,当文件不存在就创建,然后尝试去获取文件锁,若是成功,则将程序的进程号写入到该文件中,写入后不要关闭或解锁,保证进程一直持有该文件锁,若是获取锁失败,代表程序已经被运行,则退出本次启动。原创 2023-12-30 18:08:20 · 885 阅读 · 0 评论 -
8. 信号基础
函数会将 mask 所指向的信号集来替换进程的信号掩码,也就是将进程的信号掩码设置为参数 mask 所指向的信号集,然后挂起进程,直到捕捉到信号被唤醒,如果捕捉的信号是 mask 中的,就不会被唤醒,继续等待。内核为每个进程都维护了一个信号掩码,其实就是一个信号集,即一组信号。如果进程当前正在执行信号处理函数,在处理信号期间接收到了新的信号,如果该信号是信号掩码中的成员,就会被阻塞,将该信号添加到等待信号集中,为了确定进程中处于等待状态的是哪些信号,可以使用sigpending()函数获取。原创 2023-12-07 16:01:31 · 919 阅读 · 0 评论 -
7. 系统信息与系统资源
是一个虚拟文件系统,它以文件系统的方式为应用层访问系统内核数据提供了接口,用户和应用程序可以通过 proc 文件系统得到系统信息和进程相关信息,对 proc 文件系统的读写作为与内核进行通信的一种手段。内核定义的一个全局变量,使用该变量来记录系统从启动以来的系统节拍数,所以这个变量用来记录以系统节拍时间为单位的时间长度,Linux 内核在编译配置时定义了一个节拍时间,使用节拍率(一秒钟多少个节拍数)来表示,譬如节拍率为 200Hz,就表示一秒钟 200 个节拍,节拍时间为 1s/200。原创 2023-12-04 22:35:17 · 157 阅读 · 0 评论 -
6. 字符串处理
dest 结尾的 \0 会被覆盖,src 末尾的 \0 会保留。将 c 对应的一个字符输出到标准输出设备中,可以是一个字符,也可以是 0 ~ 127 中的一个数字,会自动将其转换为对应的字符。在计算字符串长度时,结束字符不会计算在内,但是在计算字符串大小的时候,结束字符 ‘\0’ 会计算在内。拷贝函数会覆盖原有的内容,但是如果 dest 的字符个数大于 src 的话,多的内容会保留。两者的不同是,该函数是从字符串的末尾开始查找,返回从前往后的最后一次出现的位置。输出一个指定的字符,但是可以指定输出文件。原创 2023-12-02 15:52:07 · 94 阅读 · 0 评论 -
5. 文件属性和目录
rename()调用仅操作目录条目,而不移动文件数据(不改变文件 inode 编号、不移动文件数据块中存储的内容),重命名既不影响指向该文件的其它硬链接,也不影响已经打开该文件的进程(譬如,在重命名之前该文件已被其它进程打开了,而且还未被关闭)。只有超级用户进程才能更改文件的用户ID和组ID,普通用户可以将文件的组ID修改为其所从属的任意附属组ID,前提是该进程的有效用户ID 等于文件的用户ID。目录文件是一种特殊文件,不适合使用前面介绍的文件 IO 操作,Linux 中有专门的对目录文件操作的函数。原创 2023-11-30 18:21:59 · 131 阅读 · 0 评论 -
4. 标准 IO 库
标准 IO 库指的式标准 C 库中用于文件 IO 操作相关的一系列库函数的集合,底层是用系统 IO 实现的。但是标准 IO 比系统 IO 具有更好的可移植性,因为不同的操作系统内核提供的系统调用都是不一样的;其次标准 IO 具有更高的效率,因为标准 IO 提供了自己的缓冲区,但是系统 IO 不具备缓冲区。原创 2023-11-26 21:42:00 · 201 阅读 · 0 评论 -
3. 深入探究文件 IO
当两个独立的进程对同一个文件进行操作时,因为此时文件是共享的,如果当一个进程的操作未完成时,另一个进程就对文件进行操作就会发生竞争冒险。该结构体中有一个指针指向了文件描述符表,而文件描述符表中的每一个元素对应文件表,文件表存放着文件的相关信息。在 Linux 系统中,open 得到的文件描述符可以进行复制,新的文件描述符也可以对旧文件描述符指向的文件进行操作,拥有相同的权限。不同的文件描述符就对应不同的文件表,而位置偏移量就保存在文件表中,但是文件表中的 inode 指针指向的都是同一个 inode。原创 2023-11-25 16:34:48 · 106 阅读 · 0 评论 -
2. 文件 IO 基础
对于每个打开的文件,系统都会记录它的续写位置偏移量,当调用 read 和 write 函数时,就会从当前偏移位置开始读写。(文件当前位置),offset 可以为正或负;返回值:成功返回当前位置,失败返回 -1。(文件头部),offset 只能为正;(文件末尾),offset 可为正或负。相对偏移的参考值,可以是。偏移量,以字节为单位。原创 2023-11-24 15:45:12 · 81 阅读 · 0 评论 -
1. 应用编程概念
没有操作系统支持的编程环境称为裸机编程,比如单片机,直接在硬件上运行的程序;驱动编程指的是基于内核驱动框架开发驱动程序,通过调用 Linux 内核提供的接口完成设备驱动的注册,驱动程序负责底层硬件操作相关逻辑;而应用编程在应用程序中通过系统调用接口完成应用程序的功能和逻辑。系统调用其实是 Linux 内核提供给应用层的应用编程接口,是 Linux 应用层进入内核的入口。用户通过系统调用来使用系统提供的各种服务,实现了与内核的交互。原创 2023-11-24 15:03:32 · 204 阅读 · 0 评论