嵌入式系统开发复习指北

【嵌入式系统】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分的大题,让大家写内核模块
在这里插入图片描述

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

在这里插入图片描述

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

驱动开发

在这里插入图片描述

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

在这里插入图片描述

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

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

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

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
嵌入式系统开发是一门涉及硬件和软件的综合学科,主要用于设计和开发嵌入式设备,如智能手机、汽车电子系统、家电等。以下是一个嵌入式系统开发的学习路线: 1. 学习C/C++编程语言:C/C++是嵌入式系统开发中最常用的编程语言,掌握它们是入门的基础。 2. 学习计算机体系结构和操作系统原理:了解计算机的基本原理和操作系统的工作原理,对于理解嵌入式系统的底层运行机制非常重要。 3. 学习嵌入式系统架构和硬件知识:了解常见的嵌入式系统架构,如ARM、MIPS等,并学习相关的硬件知识,如处理器、内存、外设等。 4. 学习嵌入式系统开发工具和平台:掌握常用的嵌入式开发工具和平台,如Keil、IAR Embedded Workbench、Arduino等,以及相关的调试和测试工具。 5. 学习嵌入式系统编程技术:学习嵌入式系统的编程技术,如裸机编程、驱动程序开发、RTOS(实时操作系统)等。 6. 学习嵌入式系统通信和网络技术:了解嵌入式系统中常用的通信和网络技术,如UART、SPI、I2C、CAN、Ethernet等。 7. 学习嵌入式系统电源管理和功耗优化:了解嵌入式系统的电源管理技术和功耗优化方法,以提高系统的性能和续航能力。 8. 实践项目开发:通过参与实际的嵌入式系统项目开发,将所学知识应用到实际中,提升自己的实践能力和项目管理能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

okfang616

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

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

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

打赏作者

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

抵扣说明:

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

余额充值