从零开始嵌入式

Thinking will not overcome fear but action will.

Linux 网络通信之TCP

介绍网络通信的使用

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 介绍 使用ss -t查看 TCP连接,使用ss -ta查看所有的包括监听状态的TCP连接。 使用ss -u查看 UDP连接,使用ss -ua查看所有的包括未连接状态的UDP连接。 使用ss -s列出所有的socket连接。 使用cat /...

Linux 进程信号的应用

介绍进程信号的使用

进程信号很常见,比如前台运行进程时终止进程按下的快捷键Ctrl+C就会产生一个进程信号。这个信号会记录到该进程的PCB结构体中,当系统从内核态切换到该进程执行时就会先检查信号进行处理。 介绍 使用kill -l查看所有的信号,值) 宏名称的结构,只用关注1~31号信号,后面的信号都是实时信号。 使用命令man 6 signal可以找到每个宏信号代表的具体含义和动作。 ...

Linux 进程通信之ipcs

介绍进程间通信(ipcs)包括:消息队列、信号量、共享内存

进程间通信(IPC,Inter-Process Communication),包括消息队列(查看方式:ipcs -q)、信号量(查看方式:ipcs -s)、共享内存(查看方式:ipcs -m)。 消息队列 实验过程中发现WSL(Windows子系统)下的msgget函数总是报错:Function not implemented。 因此该实验在虚拟机Ubuntu12.04下进行。 介绍...

Linux 进程通信之有名管道FIFO

介绍进程之间通过有名管道FIFO通讯

FIFO,也称为命名管道,它是一种文件类型。 特点 FIFO可以在无关的进程之间交换数据,即不要求交换数据的双方是父子进程,与无名管道不同。 FIFO有路径名与之相关联,它会生成一种特殊设备文件存在于文件系统中。 原型 int mkfifo(const char *pathname, mode_t mode); 其中的 mode 参数与open函数中的 mode 相同。一旦创建了一个 ...

Linux 进程通信之无名管道

介绍进程之间通过无名管道通讯

无名管道是 UNIX 系统IPC最古老的形式。 特点 它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。 它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。 它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。 原型 1 2 #include...

Linux fork进程

介绍进程fork的简单模板

首先知道execl函数可以开辟一段内存空间,传入程序的二进制文件和参数,跳转执行,但是pid还是相同的。而执行fork后,会fork进程的所有资源,包括变量。同时有两个进程在函数中运行,有两次返回。 例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include <stdio....

使用ssh工具连接到WSL(Windows子系统)

系统编程的准备工作 这里我使用的是Windows子系统进程学习

在接下来的学习中,我先跳出去先学习系统编程的内容。为此只需要一台有gcc的Linux平台即可,这里我使用的是Windows子系统Ubuntu18.04 首先是卸载重装一遍ssh服务,这里不是很确定是不是自带ssh服务有没有问题。 这一步最好需要。 1 2 sudo apt-get remove openssh-server sudo apt-ge...

9_【综合】编写LED控制驱动和系统应用

完整的LED驱动和上层控制应用

头文件 Linux中申请GPIO的头文件 include/linux/gpio.h 三星平台的GPIO配置函数的包含头文件 arch/arm/plat-samsung/include/plat/gpio-cfg.h EXYNOS平台GPIO配置函数传参定义的包含头文件 arch/arm/mach-exyn...

8_编写系统程序调用驱动

编写一个控制台应用进行控制底层设备

目标:系统编程调用上次写好的“/dev/hello_dev”设备节点文件。 系统编程中不知道函数头文件的可以使用类似man 2 open命令查询。 需要的头文件 #include // 调用打印的头文件,使用printf #include <sys/types.h> // 基本数据类型头文件,使得基本数据长度在32位系统中以32位为基准,64位系统中以64位为基...

7_生成设备节点

在dev目录下生成可操作的设备节点文件

本节设备是注册到杂项设备的设备节点,所以需要关注三个文件: drivers/char/misc.c include/linux/miscdevice.h include/linux/fs.h miscdevice杂项设备设备节点相关参数 关键结构体:miscdevice 常用参数 .minor设备号 可以通过一个宏让系统自动分配 .name 生成设备节点的...