qianyi
qianyi
## 进程概念 存放在介质上的程序运行起来就是进程。对Linux来说,线程也是一种特殊的进程。在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存。每个进程有独立的虚拟处理器和虚拟内存,每个线程有独立的虚拟处理器,同一个进程内的线程有可能会共享虚拟内存。 进程信息在内核中都是保存在`task_struct`结构中,进程标识PID和线程标识TID对于同一个进程或线程来说都是相等的。 Linux中可以用ps命令查看所有进程的信息: ``` ps -eo pid,tid,ppid,comm ``` ### 进程状态 进程的各个状态之间的转化构成了进程的整个生命周期。 
## 内核开发准备 ### No libc or Standard Headers 为了保证内核运行速度和体积,kernel不会链接标准C库或其他任何库。但是libc常用的一些函数库内核已经实现了,例如字符串处理相关的都在`#include `。内核中不使用`printf`,而是使用`printk`函数。例如 ```C printk(KERN_ERR" this is an error\n"); ``` 主要`KERN_ERR`后面没有引号。 ### GNUC 因为使用GNU C,所有内核中常使用GNU C中的一些扩展。 ### Inline Functions ```C static inline void...
1.使用U盘装机的时候记得勾选格式化优盘 2.安装搜狗拼音记得取消`Only Show Current Language`,才能找到搜狗。  3.安装apt install fcitx可能会提示找不到,按照Ubuntu给的提示安装 4.var目录可以挂载在内存上,不然var目录会越来越大 >tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0 tmpfs /var/log tmpfs defaults,noatime,mode=1777 0 0
## QEMU简介 QEMU是一款开源的模拟器及虚拟机监管器(Virtual Machine Monitor, VMM)。QEMU主要提供两种功能给用户使用。一是作为用户态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码。二是作为虚拟机监管器,模拟全系统,利用其他VMM(Xen, KVM, etc)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。 用户可以通过不同Linux发行版所带有的软件包管理器来安装QEMU。如在Debian系列的发行版上可以使用下面的命令来安装: > sudo apt-get install qemu ## 基本原理 QEMU作为系统模拟器时,会模拟出一台能够独立运行操作系统的虚拟机。如下图所示,每个虚拟机对应主机(Host)中的一个QEMU进程,而虚拟机的vCPU对应QEMU进程的一个线程。  系统虚拟化最主要是虚拟出CPU、内存及I/O设备。虚拟出的CPU称之为vCPU,QEMU为了提升效率,借用KVM、XEN等虚拟化技术,直接利用硬件对虚拟化的支持,在主机上安全地运行虚拟机代码(需要硬件支持)。 QEMU发起ioctrl来调用KVM接口,KVM则利用硬件扩展直接将虚拟机代码运行于主机之上,一旦vCPU需要操作设备寄存器,vCPU将会停止并退回到QEMU,QEMU去模拟出操作结果。 虚拟机内存会被映射到QEMU的进程地址空间,在启动时分配。在虚拟机看来,QEMU所分配的主机上的虚拟地址空间为虚拟机的物理地址空间。 QEMU在主机用户态模拟虚拟机的硬件设备,vCPU对硬件的操作结果会在用户态进行模拟,如虚拟机需要将数据写入硬盘,实际结果是将数据写入到了主机中的一个镜像文件中。 ## 创建及使用虚拟机 1, 使用qemu-img创建虚拟机镜像。虚拟机镜像用来模拟虚拟机的硬盘,在启动虚拟机之前需要创建镜像文件。 > qemu-img create -f...
参考资料 https://github.com/ChenLittlePing/LearningVideo
YUV、RGB都是一种颜色编码方式。 ## RGB颜色编码 在图像显示中,一张 1280 * 720 大小的图片,就代表着它有 1280 * 720 个像素点。其中每一个像素点的颜色显示都采用 RGB 编码方法,将 RGB 分别取不同的值,就会展示不同的颜色。每个原色占8位,也就是一个字节,一个像素占3个字节,那么一张1280*720图片所占的存储空间就是 1280 * 720 * 3 / 1024 / 1024=2.63M ## YUV颜色编码 YUV是一种颜色空间,基于YUV的颜色编码是流媒体的常用编码方式。Y表示流明,U、V表示色度、浓度,这种表达方式起初是为了彩色电视与黑白电视之间的信号兼容。 对于图像每一点,Y确定其亮度,UV确认其彩度。 和RGB编码类似,每个像素点都保护Y、U、V分量。但Y分量和UV分量是可以分离的,如果没有Y分量也可以显示完整图像,只不过是黑白的。...
## 什么是V4L2 V4L 是 Video for Linux 的缩写,它是 Linux 内核中关于视频设备的子系统,它为 Linux下的视频驱动提供了统一的接口,使得应用程序可以使用统一的 API 函数操作不同的视频设备,极大地简化了视频系统的开发和维护。由于早期的 V4L 有很多缺陷,Bill Dirks 等人对其进行了重新设计,并取名为 Video for Linux 2(V4L2),最早出现于 Linux2.5.x 版本。V4L2 相比于 V4L 有更好的扩展性和灵活性,并且支持的硬件设备更多。由于历史的原因,V4L2 一般兼容 V4L,所以很多程序可以用 V4L 接口。...
## 参考资料 [NDK学习笔记:FFmpeg + SurfaceView](https://blog.csdn.net/a360940265a/article/details/84988211) [使用FFmpeg+OpenSL ES播放PCM音频](https://blog.csdn.net/andrexpert/article/details/85254794) [学习OpenGL ES之什么是Shader?](https://juejin.im/post/5a31d2ec6fb9a0452341e514) [openGL 顶点,坐标系,纹理坐标](https://blog.csdn.net/xipiaoyouzi/article/details/53609650)
## 背景 最新需要移植ffmpeg到Android上,但网上的方法绝大多数只是适合比较老的版本,在编译最新版的过程中遇到了一些问题,所以才有了这次的踩坑之旅。 - FFmpeg使用最新版本4.1 - NDK使用[android-ndk-r17c](https://dl.google.com/android/repository/android-ndk-r17c-linux-x86_64.zip?hl=zh_cn)版本 ## 错误1 > libavformat/udp.c: In function 'udp_set_multicast_sources': libavformat/udp.c:290:28: error: request for member 's_addr' in something not a structure or union mreqs.imr_multiaddr.s_addr = ((struct...
## 背景 今天遇到个坑,说来也简单,就是在Android中用char定义了一个变量,值位-1,然后有个if语句会和一个int类型的变量进行比较,然后再进行业务逻辑,但这个if判断语句死活进不去。 ## 为什么出现这种情况 查资料发现C语言规定char可以是signed也可以是unsigned,具体情况由编译器决定,在PC上char通过gcc或者clang编译出来都是signed,而在ARM平台上,char确是signed。 ## 解决办法 可以通过显示的指定`signed char`来明确是否有符号,不过感觉这样定义不太符合习惯,也可以在编译参数中指定`CFLAG += fsigned-char`进行配置。也可以通过使用标准库``,使用int8_t或者uint8_t等数据类型,个人认为这种处理方式比较好,适合跨平台。 ### 参考资料 [Is char signed or unsigned by default?](https://stackoverflow.com/questions/2054939/is-char-signed-or-unsigned-by-default) https://www.cnblogs.com/SoaringLee/p/10532402.html