Linux 应用编程
文件 IO
系统调用进入内核
内核的 sys_open、sys_read 做了什么:
Framebuffer 应用编程
LCD 操作原理
在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。Frame
是帧的意思,buffer 是缓冲的意思,这意味着 Framebuffer
就是一块内存,里面保存着一帧图像。Framebuffer
中保存着一帧图像的每一个像素颜色值,假设 LCD 的分辨率是
1024x768,每一个像素的颜色用 32 位来表示,那么 Framebuffer
的大小就是:1024x768x32/8=3145728 字节。
简单介绍 LCD 的操作原理:
驱动程序设置好 LCD 控制器:根据 LCD 的参数设置 LCD
控制器的时序、信号极性;根据 LCD 分辨率、BPP 分配 Framebuffer
APP 使用 ioctl 获得 LCD 分辨率、BPP
APP 通过 mmap 映射 Framebuffer,在 Framebuffer 中写入数据
假设需要设置 LCD 中坐标 (x,y)
处像素的颜色,首要要找到这个像素对应的内存,然 ...
kalibr
安装
ros 安装
设置 sources.list:
1sudo sh -c 'echo "deb <http://packages.ros.org/ros/ubuntu> $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
设置 keys:
1sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
安装:
12sudo apt-get updatesudo apt-get install ros-kinetic-desktop-full
设置环境:
12345echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrcsource ~/.bashrcorecho "source /opt/ros/kinetic/setup.zsh" >> ~/. ...
ffmpeg 常用命令
合并文件
1ffmpeg -i "concat:file_name1.ts | file_name2.ts" -c copy_out.ts
在视频文件中提取图片
1ffmpeg -i output.ts '%d.png'
H264 转 yuv
1ffmpeg -i SampleEis2Venc.H264 -pix_fmt nv12 -vcodec rawvideo -an SampleRaw.yuv
单张图片生成 H264 视频
1ffmpeg -ss 0 -t 16 -f lavfi -i color=c=0x000000:s=1920x1080:r=25 -i test.jpg -filter_complex "[1:v]scale=1920:1080[v1];[0:v][v1]overlay=0:0[outv]" -map [outv] -c:v libx264 SampleRaw.H264 -y
横向拼接两个视频
123ffmpeg -i out1.mp4 -i out2.mp4 -filter_complex "[0:v]pad=iw*2:ih*1[a];[a][1:v ...
Makefile 语法
Makefile 规则
一个简单的 Makefile 文件包含一系列的“规则”,其样式如下:
1目标 (target)…: 依赖 (prerequiries)…<tab>命令 (command)
目标 (target) 通常是要生成的文件的名称,可以是可执行文件或 OBJ
文件,也可以是一个执行的动作名称,诸如`clean’。
依赖是用来产生目标的材料(比如源文件),一个目标经常有几个依赖。
命令是生成目标时执行的动作,一个规则可以含有几个命令,每个命令占一行。
注意:每个命令行前面必须是一个 Tab 字符,即命令行第一个字符是 Tab。
通常,如果一个依赖发生了变化,就需要规则调用命令以更新或创建目标。但是并非所有的目标都有依赖,例如,目标“clern”的作用是清除文件,它没有依赖。
规则一般是用于解释怎样和何时重建目标。
make
首先调用命令处理依赖,进而才能创建或更新目标。当然,一个规则也可以是用于解释怎样和何时执行一个动作,即打印提示信息。一个
Makefile 文件可以包含规则以外的其他文本,但一个简单的 Makefile
文件仅仅需要包含规则。虽然真正的规 ...
编译流程
gcc 编译流程
一个 C/C++文件要经过预处理 (preprocessing)、编译 (compilation)、汇编
(assembly) 和链接 (linking) 等 4 步才能变成可执行文件。
预处理
C/C++源文件中,以“#”开头的命令被称为预处理命令,如包含命令“#include”、宏定义命令“#define”、条件编译命令“#if”、“#ifdef”等。预处理就是将要包含
(include)
的文件插入原文件中、将宏定义展开、根据条件编译命令选择要使用的代码,最后将这些东西输出到一个“.i”文件中等待进一步处理。
编译
编译就是把
C/C++代码(比如上述的“.i”文件)“翻译”成汇编代码,所用到的工具为
cc1(它的名字就是 cc1,x86 有自己的 cc1 命令,ARM 板也有自己的 cc1
命令)。
汇编
汇编就是将第二步输出的汇编代码翻译成符合一定格式的机器代码,在 Linux
系统上一般表现为 ELF 目标文件 (OBJ 文件),用到的工具为 as。x86 有自己的
as 命令,ARM 版也有自己的 as 命令,也可能是 xxxx-as(比如
arm-li ...
git 常用命令
常用
git 与上游 保持同步
123git remote add src-zephyr <https://github.com/zephyrproject-rtos/zephyr>git pull src-zephyr mastergit push
git 合并分支
123git revertgit pull --rebase origingit pull --rebase origin release-v1.0
如果有冲突:
123git status # 查看冲突文件并解决冲突git add # 提交解决冲突后的文件git rebase --continue # 完成
免密操作
方法一
进入用户主目录:
1$ cd ~
建立文件 .git-credentials:
1$ touch .git-credentia
编辑文件 .git-credentials:
1$ vi .git-credentials
添加规则:
1<https://username:password@gitlab.com>
执行命令
1$ git config --global cre ...