无题
imx6ull板子为例:下载源码:https://github.com/nxp-imx/uboot-imx/tree/lf_v2024.04注意设备树的语法最后要空行
1、编译拿到源码后,先编译一遍和自己要移植的板子所用的芯片匹配的配置文件。如我这里用的是imx6ull的板子,就需要编译imx6ull的配置文件。编译过后,需要改的目录下生成了一些文件,可以按照文件去判定编译的配置文件是否和自己板子匹配。
12345678910#!/bin/bashpath="arm CROSS_COMPILE=/home/ygc/Desktop/linux-gcc/2021-6ull/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-"make ARCH=arm CROSS_COMPILE=${path} distcleanmake ARCH=arm CROSS_COMPILE=${path} menuconfigmake ARC ...
无题
1、同步阻塞(bio)、同步非阻塞(nio)、select、poll、epoll、信号驱动式io、异步io1.1 同步阻塞1、阻塞式IO,客户端发送请求,服务端接收请求,服务端处理请求,服务端返回结果,客户端接收结果。
客户端会先去访问文件描述符状态,如果文件描述符就绪,则读取数据;如果文件描述符未就绪,则会阻塞等待。数据经过网卡,dma拷贝到内核环形缓冲区后,触发一个中断,将文件描述符改到就绪态,将数据拷贝到用户空间,然后返回。
1.2 同步非阻塞相比与阻塞式IO,非阻塞式IO在等待数据就绪时不会阻塞。直接在发送或者读的时候返回负1,然后通过轮询的方式来检查数据是否就绪。注意文件描述符是需要同步内核的本质上,也还是会阻塞,读的时候就是阻塞的,只不过是在等待的过程中没有阻塞
1.3 selectselect本身是阻塞的,它通过一个数组,将一组文件描述符加入到这个数组中,然后发给内核,内核去同步有没有写或者读事件,如果有,就将对应数据的描述符位置为1,然后返回。这样就知道那个文件描述符就绪了。select的缺点是每次都要将所有的文件描述符都发给内核,然后内核再去同步。
通用技术-硬件基础
1、元器件1-1、施密特触发器:
迟滞特性:施密特触发器有两个不同的阈值电压,一个用于从低电平转换到高电平(称为上阈值电压),另一个用于从高电平转换到低电平(称为下阈值电压)。这种迟滞特性使得施密特触发器对输入信号的噪声不敏感。
输入输出关系:当输入电压超过上阈值电压时,输出会跳变到高电平;当输入电压低于下阈值电压时,输出会跳变到低电平。
应用广泛:施密特触发器常用于信号整形、脉冲产生和噪声抑制等场合。施密特触发器在数字电路和模拟电路中都有广泛应用,特别是在需要对不稳定的输入信号进行处理的场景中。如将输入信号进行整形、转化为方波。
2、协议2-1、串口串口通讯使用RX和TX交叉相连通讯,串口通讯是全双工通讯,可以同时接收和发送。同时需要接地,作为参考电压。串口通讯采用TTL(transistor-transistor logic晶体管晶体管逻辑)逻辑。输出的高电平最小2.4V,低电平最大0.4V
arm汇编与C内联汇编
0、常用指令0-1、GNU汇编语法:label:instruction @commentlabel:标号,表示地址位置,有的指令前面有标号,通过标号来定位指令位置。也可以用来表示数据地址,任何以:开头的标号都是数据地址。instruction:指令,表示一条指令。也可以是伪指令。@comment:注释,表示对指令的说明。
用户可以使用.section指令来自定义一个段,汇编系统自定义了一些段名字。.text:定义一个代码段。.data:定义一个初始化的数据段。.bss:定义一个未初始化的数据段。.redata:定义一个只读的只读数据段。
程序默认入口__start,也可以使用链接脚本中ENTRY指令指定程序入口。
123.global __start__start: b main
.global:全局指令,表示定义一个全局标号。相当于C语言中的extern,全局变量.byte:定义一个字节,相当于C语言中的char。.short:定义一个字,相当于C语言中的short。.long:定义一个双字,相当于C语言中的int。.equ:定义一个字节,.equ num,0x12 。相当于 ...
无题
1、内核开发中的追踪技术1-1、ftrace1-2、per_event(perf)1-3、eBPF1-4、SystemTap1-5、strace1-6、sysdig1-7、GDB
无题
编译选项 -fsanitize=addressAddress_Sanitize检测内存泄漏和越界访问
反汇编看代码objdump -d ./a.out
readelf 看elf文件信息
应用代码库
调试篇1、log彩色打印命令
我们常用的printf函数输出来的颜色是终端的配色。
如果想要输出不同的颜色进行区分,
就需要用到printf的控制命令:\033[m。
控制命令以\033[开头,
以m结尾,
而中间则是属性码,
属性代码之间使用;分隔,
如\033[1;34;42m。而属性代码的含义见下面的表格
示例:
12345678910111213141516171819202122232425262728293031323334353637383940414243#include <stdio.h>void printf_red(const char *s){ printf("\033[0m\033[1;31m%s\033[0m", s);}void printf_green(const char *s){ printf("\033[0m\033[1;32m%s\033[0m", s);}void printf_yellow(const char *s){ ...
无题
ffplay -ar 8000 -ac 1 -f mulaw out.g711u-ar 指定音频采样率-ac 指定音频声道数-f 指定音频格式,这里使用mulaw格式
将wav音频转换为mulaw格式(g711u)ffmpeg -i input.wav -ar 8000 -ac 1 -acodec pcm_mulaw output.ulaw-i 指定输入文件-ar 指定音频采样率-ac 指定音频声道数-acodec 指定音频编码格式,这里使用pcm_mulaw
将mp3音频转换为wav格式,再转为mulaw格式才行,直接转有概率转的不对ffmpeg -i song.mp3 -ar 8000 -ac 1 -ab 8 song.wav-i 指定输入文件-ar 指定音频采样率-ac 指定音频声道数-ab 指定音频码率
无题
1、下载源码,官网下载比较简单,略
2、编译源码makefie文件在源码目录下,修改makefie文件,指定交叉编译器
12CROSS_COMPILE ?= 指定编译器地址ARCH ?= arm
3、添加中文支持/libbb/printable_string.c下函数 printable_string将关于0x7f的判断去掉接着将ibbb/unicode.c中在unicode_conv_to_printable2函数中将关于0x7f的判断去掉
4、修改配置4-1、先默认配置一边1make defconfig
4-2、打开图形配置界面1make menuconfig
4-3、选择编译的方式
这里需要选择动态编译,选择静态编译的话DNS会出现问题
1234Location:-> Settings -> Build static binary (no shared libs)
允许使用vi
123Location :-> Setting -> vi-style line editing commands
...