关于之前知识的一些补充 02

十三:关于http的补充

1.HHTP/HTTPS

​ HTTP 是在 TCP/UDP 之上、用于浏览器与服务器交换明文请求/响应的应用层协议;HTTPS 是在 HTTP 之上加了 TLS(加密+认证+完整性)------端到端加密的"HTTP over TLS"。

​ HTTP 默认端口80 HTTPS 默认端口443

2. HTTP交互

本质上就是三次握手,四次挥手

3.http的格式

4.TCP四层对应内容

链路层(Link / Data Link) --- 负责帧的局域网传输(Ethernet, Wi-Fi 等),包含 MAC(网卡)。

网际层(Internet / Network) --- IP(IPv4/IPv6)、路由、ICMP(ping)、ARP(ARP 实现于链路与网际之间)。

传输层(Transport) --- TCP / UDP:端口、分段、重传、流控、可靠性等。

应用层(Application) --- HTTP、DNS、SSH 等协议,使用端口与传输层协作


MAC = 网卡匹配(局域网设备识别)

IP = 主机匹配(全网主机寻址)

端口 = 进程匹配(同一主机上的应用区分

MAC → IP → Port

5.两道笔试题

c 复制代码
若某主机的IP地址及网络前缀为192.168.5.121/29,则该主机所在子网地址为_____

    IP 地址:192.168.5.121

    网络前缀:/29

    第一步:确定子网掩码

    /29 表示 前 29 位是网络位。

    二进制子网掩码:

    11111111.11111111.11111111.11111000


    换算成十进制:

    255.255.255.248


    第二步:确定子网大小

    子网掩码 /29 → 主机位 = 32 - 29 = 3 位

    可用 IP 数量 = 2³ - 2 = 6 个

    子网块大小 = 2³ = 8

    所以每个子网的范围是 以 8 为步长 递增。


    第三步:找出子网地址

    看 IP 的最后一段(121):

    子网范围:0--7, 8--15, 16--23, ..., 120--127

    121 落在 120--127 这个范围

    所以 子网地址 = 192.168.5.120
c 复制代码
在Internet中,使用_____协议可以检查目标主机是否可达,常用的命令_____

    ICMP(Internet Control Message Protocol,互联网控制报文协议)。

    常用的命令是 ping。

十四:关于项目中的补充

1. lvgl/fb

gui-guider(免费开源) 可以和lvgl库绑定

framebuffer是一种通用的框架

​ open() ; /dev/fb0

​ 通过ioctl来控制 取的就是分辨率240*320 和16bit(565)

​ 然后通过内存映射(mem) 返回值是一个指针 指向显示的地址

2.线程邮箱

​ 多线程并发模型处理----线程邮箱----线程间如何交互

​ 在其中队列起着缓冲作用

​ 线程交互(send/recv) 其中有着便利链表的功能,根据名字来入队/出队(也传tid),从而数据共享

c 复制代码
IPC = Inter-Process Communication
就是 进程之间交换数据、共享信息的一类机制。
c 复制代码
话术:
"线程之间没有像进程那样的 IPC,因为它们共享同一个地址空间,所以通信一般就是读写共享内存。但为了避免竞争条件,需要用 同步机制,比如互斥锁、条件变量、信号量。另外我在项目里用过 线程邮箱(消息队列),这种方式可以把线程间通信抽象化,代码更清晰。"

3.mqtt

mqtt/http都是应用层协议

​ mqtt的格式 固定头(各种动作,eg:心跳包)

​ 可变头:

​ payload:

​ 端口号:1883

​ mqtts(加密后):8883

十五:linux设备驱动相关补充

1.内核 版本

c 复制代码
uname -r
5.4.0-150-generic

2.U-Boot版本

c 复制代码
上电串口调试

U-Boot 2012.04.01 (Feb 19 2019 - 18:35:11)

3.linux启动流程

1.Bootloader (U-Boot)

  • 初始化硬件(时钟、DDR、串口、网口等)
  • 下载/引导内核到内存
  • 传递内核启动参数

2.Linux 内核

  • 解压内核映像(zImage/uImage)
  • 硬件驱动初始化(CPU、内存、总线、外设)
  • 挂载根文件系统
  • 启动第一个用户态进程(通常是 /sbin/init

3.根文件系统 & 用户空间

  • init 进程启动,解析 /etc/inittab
  • 运行系统服务、启动脚本,进入 Shell 或应用

4.U-Boot常用命令

c 复制代码
printenv:显示环境变量
setenv var value:设置环境变量
saveenv:保存环境变量到 Flash
bootm addr:启动内核(uImage)
bootz addr:启动 zImage
tftpboot addr filename:通过 TFTP 下载文件到内存

help:查看命令帮助

5.内核启动参数

c 复制代码
U-Boot 2012.04.01 (Feb 19 2019 - 18:35:11)

CPUID: 32440001
FCLK:      400 MHz
HCLK:      100 MHz
PCLK:       50 MHz
DRAM:  64 MiB	//内存--SDRAM
WARNING: Caches not enabled
Flash: 0 KB
NAND:  256 MiB	//NAND Flash
In:    serial
Out:   serial
Err:   serial
Net:   dm9000
Warning: dm9000 MAC addresses don't match:
Address in SROM is         ff:ff:ff:ff:ff:ff
Address in environment is  00:0c:29:4d:e4:f4

Hit any key to stop autoboot:  0

6.内核编译原理及步骤

c 复制代码
Kconfig:定义功能选项(菜单)

Makefile:根据配置决定编译哪些源码

.config:用户配置结果(保存的选项)

make menuconfig:图形化配置工具,修改 .config
------------------------------------------------------------------------
1.make menuconfig	//配置内核
2.make uImage 		//编译内核映像--------生成 U-Boot 可识别的格式
3.编译模块			//make modules
4.静态/动态    tftp /nfs     uImage/.ko

7.驱动的分类/设备号的组成/设备节点

复制代码
驱动分类
	字符设备驱动:没有缓存机制(或较弱),一次读写就直接触发设备访问
	块设备驱动
	网络设备驱动:没有对应的 /dev 设备节点,而是通过 套接字 socket 访问

设备节点
	本质上是 用户态到内核态驱动的入口。

8.内核定时器的使用

c 复制代码
static struct timer_list my_timer;		//定义定时器结构体

void my_timer_callback(struct timer_list *t)
{
    printk(KERN_INFO "my_timer_callback called (%ld).\n", jiffies);
    // 如果要周期执行,可以再次启动
    mod_timer(&my_timer, jiffies + msecs_to_jiffies(1000));
}

// 初始化并设置回调
timer_setup(&my_timer, my_timer_callback, 0);

mod_timer(&my_timer, jiffies + msecs_to_jiffies(1000));	//启动定时器 // 设置 1 秒后超时

del_timer(&my_timer);		//删除定时器

9.设备树的补充

1.后缀名

c 复制代码
.dts(Device Tree Source)

	设备树源码文件,描述某一块具体的开发板(Board)。

	比如 imx6ull-14x14-evk.dts。


.dtb(Device Tree Blob)

	编译后的二进制文件,由 dts/dtsi 转换而来。

	U-Boot 启动内核时,把 dtb 传给内核。

	内核解析 dtb,根据里面的描述注册和初始化外设。
c 复制代码
面试回答:
	设备树(Device Tree)是 Linux 内核用来描述硬件的机制。源码是 .dts,公共部分放在 .dtsi,编译后生成 .dtb(二进制 blob)。U-Boot 把 .dtb 传给内核,内核解析后根据 compatible 匹配驱动,完成外设初始化。这样硬件信息和内核解耦,方便移植和维护
相关推荐
汐汐咯2 小时前
linux上安装minconda
linux·运维·服务器
小波小波轩然大波2 小时前
Linux服务器配置(mariadb服务器)
linux·服务器·mariadb
忧郁的橙子.2 小时前
k8s 主节点重启后 从节点 get 异常
linux·运维·服务器
Raymond运维3 小时前
Apache介绍和安装
linux·运维·apache
XINVRY-FPGA3 小时前
XC7A100T-2CSG324I 赛灵思 Xilinx AMD Artix-7 FPGA
arm开发·嵌入式硬件·fpga开发·硬件工程·信号处理·dsp开发·fpga
半梦半醒*3 小时前
nginx的访问控制、用户认证、https
linux·运维·服务器·nginx·https·centos
扫地的小何尚3 小时前
CUDA 13.0深度解析:统一ARM生态、UVM增强与GPU共享的革命
arm开发·人工智能·自然语言处理·gpu·nvidia·jetson·nvidia thro
三毛20044 小时前
玳瑁的嵌入式日记---0928(ARM--I2C)
arm开发
Skrrapper4 小时前
ubuntu?centos?还是 redhat?Linux 系统选哪个?
linux·ubuntu·centos