嵌入式系统开发复习指北

news2024/11/25 4:51:23

【嵌入式系统】20计科3-4班 第1讲 文件IO操作测试
【嵌入式系统】20计科3-4班 第2讲第4讲进程控制与线程测试
【嵌入式系统】20计科3-4班 第3讲进程通信测试
【嵌入式系统】20计科3-4班 第5-6讲内核和BootLoader开发测试
【嵌入式系统】20计科3-4班 第7讲驱动程序开发测试

大题

1

编写一个C语言程序,利用文件I/O编程的系统调用函数实现:
在当前目录下创建一个文件"hello.txt",在文件中写入 “hello, software weekly”,
再从文件中读取其中的weekly并显示在屏幕上

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

int main()
{
    char buf[1024];
    int fd = creat("hello.txt", S_IRUSR | S_IWUSR);
    if (fd == -1)
    {
        printf("创建文件失败\n");
        exit(1);
    }
    write(fd, "hello, software weekly", 22);
    close(fd);
    fd = open("hello.txt", O_RDONLY);
    if (fd == -1)
    {
        printf("打开文件失败\n");
        exit(1);
    }
    lseek(fd, -6, SEEK_END);  // 将文件指针移动到"weekly"的起始位置
    int n = read(fd, buf, 6); // 读取"weekly"
    if (n == -1)
    {
        printf("读取文件失败\n");
        exit(1);
    }
    buf[n] = '\0'; // 将读取到的字符串末尾加上结束符
    printf("%s\n", buf);
    close(fd);
    return 0;
}

2.

用fork创建子进程, 要求在子进程中分别输出字符"A~F",在父进程中输出数字“1~5”

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

int main() {
    pid_t pid;
    int i;

    pid = fork();

    if (pid == 0) { // 子进程
        for (i = 0; i < 6; i++) {
            printf("%c\n", 'A' + i);
        }
    } else if (pid > 0) { // 父进程
        for (i = 1; i <= 5; i++) {
            printf("%d\n", i);
        }
        wait(NULL); // 等待子进程结束
    } else { // fork出错
        printf("Failed to fork\n");
        return 1;
    }

    return 0;
}

3.

创建无名管道实现父进程将字符串"123456"传给子进程

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#define BUFFER_SIZE 6

int main() {
    int pipefd[2]; // 无名管道的文件描述符数组
    char buffer[BUFFER_SIZE]; // 缓冲区
    pid_t pid;
    int nbytes;

    if (pipe(pipefd) == -1) { // 创建管道失败
        perror("pipe");
        exit(EXIT_FAILURE);
    }

    pid = fork();

    if (pid > 0) { // 父进程
        close(pipefd[0]); // 关闭读端
        write(pipefd[1], "123456", BUFFER_SIZE); // 写入数据
        close(pipefd[1]); // 关闭写端
    } else if (pid == 0) { // 子进程
        close(pipefd[1]); // 关闭写端
        nbytes = read(pipefd[0], buffer, BUFFER_SIZE); // 读取数据
        printf("Received string: %s\n", buffer);
        close(pipefd[0]); // 关闭读端
    } else { // fork出错
        perror("fork");
        exit(EXIT_FAILURE);
    }

    return 0;
}

4

创建新线程,在创建的新线程中实现求1~10的累加和,并要求从新线程中返回后主线程才终止

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void* sum(void* arg) { // 新线程函数
    int i, sum = 0;
    for (i = 1; i <= 10; i++) {
        sum += i;
    }
    printf("Sum: %d\n", sum);
    return NULL;
}

int main() {
    pthread_t tid; // 新线程的线程ID
    int ret;

    ret = pthread_create(&tid, NULL, sum, NULL); // 创建新线程
    if (ret != 0) { // 创建新线程失败
        printf("Failed to create thread.\n");
        exit(EXIT_FAILURE);
    }

    ret = pthread_join(tid, NULL); // 等待新线程结束
    if (ret != 0) { // 等待新线程失败
        printf("Failed to join thread.\n");
        exit(EXIT_FAILURE);
    }

    return 0;
}

5

(1)设计一个简单的内核模块,要求模块加载时再内核日志中显示“hello”,在卸载模块时内核日志中显示“bye”

#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int __init hello_init(void) {
    printk(KERN_INFO "hello\n");
    return 0;
}

static void __exit hello_exit(void) {
    printk(KERN_INFO "bye\n");
}

module_init(hello_init);
module_exit(hello_exit);

(2)编写相应的Makefile文件

obj-m += hello.o

all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

(3)写出加载内核模块的命令和卸载内核模块的命令。

sudo insmod hello.ko // 加载
sudo rmmod hello // 卸载

第五章

1. 目录操作

stat() 非常重要!
最重要的是函数怎么用,参数都是啥意思

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
选择题有可能出填空题

在这里插入图片描述

描述了目录的两个结构体
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(可能简答题,让你编写一个c语言程序:xxx,并且创建完之后打印信息)
在这里插入图片描述

在这里插入图片描述
getcwd用法:
在这里插入图片描述
两个例子可能合并成一个简答题!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
读当前目录下xxx文件的状态,并判断
要能解释出来啥意思,也要知道每一个函数的含义

在这里插入图片描述

在这里插入图片描述
实现ls

在这里插入图片描述

像这个练习题,可能就会变一下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
不仅要能写、还要能读懂、解释

在这里插入图片描述

2. 文件操作

基本概念从测试题里看,我就不说了

在这里插入图片描述

creat 你可以不用看

在这里插入图片描述
有两个参数的还有三个参数的

大题的话,要看有open,然后还要读/写/先写后读这种例子

(这里缺一个open的例子)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里不能写完直接读,直接读会从文件末尾读,是读不到你写的东西的
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
让你从这个字符串里的第6个字符开始读起
让你改下面的基础上,让你单独把 software读出来
这样下面的 printf要输出 software
在这里插入图片描述
在这里插入图片描述

3. 设备控制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

带缓冲前面加f,但是是c语言的库函数了

在这里插入图片描述
在这里插入图片描述
格式就和read()不太一样了

在这里插入图片描述

总结:其实就是讲了怎么调用函数,复习函数、实参的类型、数量、意义
学了哪些函数,功能是什么

第六章 进程控制

基本概念,重点是矜持编程

在这里插入图片描述

fork比较重要

在这里插入图片描述

返回两次!!

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
问:什么情况下输出某某某语句?

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
问你:这是执行啥操作呢?

在这里插入图片描述
执行那种可执行程序,或者命令

在这里插入图片描述
在这里插入图片描述
带p的可以写相对路径

在这里插入图片描述
在这里插入图片描述
这个程序最后怎么用

主要介绍的:fork system exec

第七章 进程通信(重点)

基本概念

在这里插入图片描述

判断题和选择题⬇️
在这里插入图片描述
在这里插入图片描述
参数是一个数组 int filedes[2]:无名管道的一个“读”还有一个“写”

在这里插入图片描述
在这里插入图片描述
父进程一定要是写进程,子进程一定是读进程。
在这里插入图片描述
关键的pipe, read, wait 很重要,关键字一定要写。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

要会定义一个 消息的格式(结构体)(简答题、应用题)
创建一个消息队列,权限是0666,但是那个1234一定要强制类型转换!
msgrcv 还有 msgctl

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

some_data是个啥?而这个消息是一个结构体
strcpy的意思?:要把buf的值赋值给
strncmp的含义?
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
system("ipcs -m"); shell命令,查看我们所有的共享内存的。

在这里插入图片描述
在这里插入图片描述
这里的 shm_addr 通常是空的(代表系统自动选择)
还有 shmflg 权限一般都是空

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
删除共享内存

你

第八章 线程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
重要:pthread_join()的作用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

第十章 内核

可能出简答题、填空题:
在这里插入图片描述

在这里插入图片描述

  1. arm-linux-gcc,在宿主机编译
  2. 在目标机上运行

三个构成:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

填空题、判断题:⬇️,容易出

在这里插入图片描述

在这里插入图片描述

串口线:目标机的ip地址、
网线:下载、挂载

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

虚拟文件系统几层?

在这里插入图片描述

常用命令

在这里插入图片描述

Linux内核模块,有可能让大家写一个内核模块,然后加载上去。

在这里插入图片描述

10分的大题,让大家写内核模块
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

驱动开发

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/668108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCB设计系列分享-高速ADC布局布线技巧

目录 概要 整体架构流程 技术名词解释 技术细节 1.裸露焊盘 2.最佳连接 3.去耦和层电容 4.PDS的高频层电容 5.分离接地 小结 概要 在当今的工业领域&#xff0c;系统电路板布局已成为设计本身的一个组成部分。因此&#xff0c;设计工程师必须了解影响高速信号链设计性能的机制。…

【操作系统】期末复习汇总最全版本!电子科技大学2023期末考试

操作系统 【考后感悟】本次考试考察了&#xff1a;操作系统的4大特征、线程和进程的区别、页表与页的基本地址变换机构、磁盘调度算法、银行家算法、调度算法&#xff08;短作业优先、时间片轮转&#xff09;、Linux的一些基本知识、shell读程序题以及PV操作编程。知识点基本涵…

目标检测经典工作发展(超详细对比):R-CNN vs SPPNet vs Fast R-CNN vs Faster R-CNN

序 网上关于两阶段目标检测&#xff08;two-stage object detection&#xff09;的几个经典工作R-CNN&#xff0c;SPPNet&#xff0c;Fast R-CNN&#xff0c;Faster R-CNN的发展&#xff0c;各自的优缺点缺乏一个比较清楚的描述&#xff0c;大部分文章讲的比较细节&#xff0c…

代码随想录算法训练营第四十一天| 背包问题

标准背包问题 有n件物品和一个最多能背重量为w 的背包。 第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 举一个例子&#xff1a; 背包最大重量为4。 物品为&#xff1a; 重量价…

c++之qt学习 基本介绍 界面设计 串口

这里写目录标题 qt基类介绍qt不同版本qt下载打开qt creater制作简单qt界面ui界面点击forms&#xff0c;双击ui文件&#xff0c;就可以进入ui编辑器 qt信号和槽给界面增加图片界面布局布局不会影响代码 界面切换更改代码验证账号密码 qt的三驾马车串口助手为下拉框加入属性信息串…

力扣动态规划专题(四)劫舍问题与股票问题 打家劫舍Ⅰ Ⅱ Ⅲ 买卖股票最佳时机Ⅰ Ⅱ Ⅲ IV 步骤及C++实现

文章目录 198. 打家劫舍213. 打家劫舍 II337. 打家劫舍 III121. 买卖股票的最佳时机动态规划贪心算法 122. 买卖股票的最佳时机 II动态规划贪心算法 123.买卖股票的最佳时机III188.买卖股票的最佳时机IV309.最佳买卖股票时机含冷冻期714.买卖股票的最佳时机含手续费 198. 打家劫…

为摸鱼助力:一份Vue3的生成式ElementPlus表单组件

目录 一、实现背景 二、简介 三、组织架构设计 四、实现方式 五、代码示例 六、示例代码效果预览 七、项目预览地址 & 项目源码地址 目前项目还有诸多待完善的地方&#xff0c;大家有好的想法、建议、意见等欢迎再次评论&#xff0c;或于github提交Issues 一、实现…

杭州市等级保护测评机构名录-2023年

等级保护测评机构并不是一成不变的&#xff0c;因为有年审不符合条件被撤销的&#xff0c;也有符合条件新增的&#xff0c;所以需要不定时查看的。这里小编就给大家汇总了2023年杭州市等级保护测评机构名录。 杭州市等级保护测评机构名录-2023年 序号&#xff1a;1 机构名称…

开源SCRM营销平台MarketGo-营销通道

一、概述 互联网逐步由蓝海市场往红海市场走&#xff0c;互联网增量的红利基本到顶了。营销层面过去要获取新用户&#xff0c;现在需要考虑用户的留存、活跃、复购等&#xff0c;重心从拉新向留存用户的精细化运营转移&#xff1b;当人口红利慢慢消失&#xff0c;成本也在逐渐…

零基础学会Python编程——开发环境的搭建

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 学习目标 一.python 介绍 1.Python 的历史 2.Python 的应用领域 二.Pytho…

电源开关这个丨和0哪个在上方?

开关这个丨和0哪个在上方&#xff1f; 开关的I或O的位置&#xff0c;根据安装的方向不同而不同。一般情况下上下方向安装时&#xff0c;都是O在上面。而水平安装时则是左O右I。 开关图片 在这种类型的开关中&#xff0c;是将“|”和“O”作为一个电源开闭循环的标示&#xff0…

PtaPython练习

一、3位水仙花数计算 1、题目 3位水仙花数”是指一个三位整数&#xff0c;其各位数字的3次方和等于该数本身。例如&#xff1a;ABC是一个“3位水仙花数”&#xff0c;则&#xff1a;A的3次方&#xff0b;B的3次方&#xff0b;C的3次方 ABC。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬…

《面试1v1》Spring循环依赖

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

Web前端 3D开发入门规划 3D效果将不再是桌面应用的专利

随着 WEB领域的快速发展 3D技术开始不再是桌面应用的专利 WEB3D技术的应用 实现了启用网址的3维呈现 让界面更直观 立体的展示 他打破了传统平面的展示形式 那么 目前的话 政府也有大量的新基建的项目 如 数字孪生 智慧城市 智慧园区 智慧工厂 智慧消费等等项目都涉及到了 3D…

系统磁盘从MBR格式转换成GPT格式来升级win11

之前的《用移动硬盘当系统盘&#xff0c;即插即用》中说到&#xff0c;需要把磁盘格式转化为MBR格式才能执行下去。问题是&#xff0c;win10升级win11要求启动方式为UEFI的话&#xff0c;磁盘格式不能为MBR。其实不升级也不影响啥&#xff0c;但是就是想好看点。所以花了点时间…

推荐系统学习

推荐系统 系统职能&#xff1a;头条/抖音/快手&#xff0c;都是以推荐系统作为流量的分发的主要手段&#xff1b; 职业发展&#xff1a;大数据处理/流式计算/数据挖掘/机器学习/高并发服务等领域。 更具用户的离十信息和行为&#xff0c;向用户推荐他感兴趣的内容 基于行为的…

Modbus TCP 协议详解及C语言示例

Modbus TCP 是一种应用于以太网的通讯协议&#xff0c;基于Modbus RTU协议。Modbus协议是一种应用于串行数据通信的协议&#xff0c;广泛应用于工业控制系统。Modbus TCP 将传统的 Modbus RTU 消息封装在 TCP/IP 报文中&#xff0c;使其能够在现代的以太网环境中进行通信。本文…

VUE 2X MVVM模型 ③

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs M V V M MVVM MVVM模型Data与El的2种写法总结 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ ⡖⠒⠒⠒…

【数据分享】1929-2022年全球站点的逐年平均风速(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 对于具体到监测站点的气象数据&#xff0c;之前我们分享过1929-2022年全球气象…

linux-7 awk

目录 1.awk默认规则 2.处理方式 3.格式 4.运算 5.getline 6. 文件内容匹配过滤打印 7.begin . end模式 8.awk条件判断打印 9.awk三元表达 10.awk精准筛选 11.awk数组 1.awk默认规则 当以多空格为分隔符时 自动压缩成一个 默认操作就是打印 默认分隔符时空格 2.处理…