自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 资源 (11)
  • 收藏
  • 关注

原创 08 uboot上增加自己的命令

在实现前需了解lds和里面的段在uboot源码目录里include/command.h:struct cmd_tbl_s { char *name; int maxargs; //命令功能函数支持的最大参数的个数 int repeatable; //此命令执行完后,再按"enter"键时是否重复执行.

2017-05-31 17:30:52 1166 1

原创 07 lds文件与自定义段

lds文件用于指定程序链接时的不同段内容的位置安排。linux内核镜像里就是利用lds文件,把不同的内容划分成很多不同的段. uboot里的命令也就是利用此功能,把所有的命令统一到一个段里.arm-linux-gnueabihf-ld –verbose > test.lds //把编译器默认的链接脚本输出到test.lds里修改test.lds, 把最前的6行删除掉, 也要删除最后一行. 在

2017-05-31 15:58:01 4051 1

原创 06 溢出攻击原理之汇编分析

如c程序的代码:test.c: 1 2 #include <stdio.h> 3 4 int main(void) 5 { 6 int buf[10]; 7 8 printf("end\n"); //用于让编译器对lr寄存器压栈 9 return 0; 10 }反汇编后得到的代码:000083cc <main>: 83cc:

2017-05-31 11:07:57 780

原创 QT 实现mp3录音程序

pcm数据比较大, 存储或传输的效率低,如编码成mp3数据,则数据可压缩到1/10. 本例使用lame库把pcm数据编码成mp3数据.1). 准备好mp3编码库 下载lame库源码: https://sourceforge.net/projects/lame/files/lame/3.99/ 下载后,进入源码目录: ./configure make && make insta

2017-05-31 00:43:21 4332 2

原创 ffmpeg移植

1. 交叉编译yasm 进入yasm源码目录 make distclean //先把之前的编译,配置文件清除 export CC=arm-linux-gnueabihf-gcc //可通过"./configure --help"查看到用环境变量CC指定交叉编译器 ./configure --prefix=/usr/local/ffmpeg_arm/xlibs -

2017-05-30 17:26:11 1329

原创 05 printf函数可变参数的实现原理之汇编分析

如实现一个像printf函数格式的函数:test.c void myprintf(char *line, ...) // line指针变量是局部变量,在栈里分配空间 { printf(line); //调用printf时,r0存放字符串地址 } int main(void) { myprintf("hello test %d, %d, %s, %d,

2017-05-29 23:49:40 1882

原创 04 局部变量的空间分配及栈回收重用之汇编分析

估计每个人在学C语言时被告之:当函数里的代码执行时,函数体内的局部变量会在栈里分配空间,函数执行结束时回收所分配的空间。 但具体是怎样分配,怎样的回收,这些问题就只能发挥想象力了,学会汇编后,其实我们就可以更加的直观地去了解。对栈不熟悉的话,可以参考程序的段,堆与栈1). 局部变量的分配空间 test.c 1 2 int main(void) 3 {

2017-05-29 15:10:32 1168

原创 07 OrangePi 配置telnet服务

telnet是一个通过网络登录系统的服务,busybox里本身已有提供此服务程序,只要配置好即可使用。 对我们的好处是配置服务后,可以不再用通过uart线来操作板上系统,只要网络连通,即可通过网络来操作即可。让开发板启动进入文件系统后,在minicom上操作(不是在pc端): 修改/etc/init.d/rcS, 在后面增加语句: mkdir /dev/pts mount -

2017-05-29 11:25:50 1089

原创 06 OrangePiLite wifi驱动配置

OrangePiLite板上的wifi型号是rtl8189fs(用的接口是sdio).1).在前面的基础上配置内核,编译出所需的wifi驱动模块 make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- Device Drivers ---&gt; [*] Network device support ...

2017-05-27 17:27:04 5452 6

原创 03 arm程序调用标准(APCS)

APCS(arm procedure call standard) arm程序(不管什么语言)的调用标准。 也就是返回值,参数怎么传递。怎样返回调用函数的位置等的一套标准做法. 1). PC寄存器是存放从哪个内存地址上取指令. 程序执行其实一条条的指令进行取指,译码,执行. 程序里调用一个函数,需要等这个被调用的函数主动返回才可以接着执行,而且被调用的函数的返回地址得刚好为调用

2017-05-27 11:51:49 909

原创 22 Qt for android里调用so动态库

因大部分android设备都是用arm 处理器,所以动态库都得用arm的编译器才可以. 而且还得用ndk里提供的arm编译器.ndk里编译器在很深的目录里,它里面有提供一个脚本,把编译器及本身所有的动态库全部集中生成到指定的路径. 我的ndk目录在"/disk3/adt-bundle-linux/android-ndk-r8d" 在终端进入ndk目录后: ./build/tools/

2017-05-26 17:45:11 6476 23

原创 02 内嵌汇编的语法及最最常用的arm汇编指令

// arm架构手册 cpu的工作模式 p41 cpu的寄存器 p43, 没有小黑三角的寄存器表示多个工作模式下共用的,带有小黑三角的表示此模式下独有 arm cpu的寄存器r0-r12通用寄存器, 随便使用 PC寄存器装着要取指的下条指令的内存地址(取指-> 译码-> 执行) cpsr: 当前程序状态寄存器, 记录当前工作模式,条件位状态等

2017-05-25 13:23:16 2579

原创 01 arm汇编前的基础

ARM公司只负责设计芯片不生产具体的硬件arm指令集版本, V4(包括arm9以下), V6(arm11), V7(a8, a9, a7, a15, a53)流水线: arm9 5级, arm11 8级, a9 x级一个程序(由多条指令组成)-->程序要执行前先放入内存, 一条条指令执行指令执行过程: 取指(从内存里把指令加载到cpu的缓存中) -->> 译码(把指令转换成硬件的功能信息)

2017-05-25 13:21:33 930

原创 05 OrangePi通过usb线实现与pc端的网络通信

minicom 是pc上操作uart设备的一个软件工具. minicom会捕捉用户的键盘输入,并把输入的内容通过uart接口发出去。但不显示发出的内容. minicom只显示通过uart接口接收到的内容.为什么接板子后,按键盘会有相应的显示? 1). 板上的uart通过usb线接到pc上. 板子可以通过uart口接收到pc端的uart口发出内容(pc端也可接收到板上发的内容

2017-05-25 11:46:49 5445

原创 04 用busybox制作自己的文件系统

busybox用于制作小型的文件系统.常用于嵌入式.在orangepi_sdk/source/busybox-1.25.0目录里有源码. 1). 先清除编译出来的文件及配置文件 make distclean 2). 配置busybox make menuconfig //进入配置界面 Busybox Settings --->

2017-05-24 17:11:45 3181 1

原创 03 OrangePi 内核编译

配置交叉编译器: 解包gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux.tar.bz2 解包后,得到的目录名比较长,改下目录名为“arm-gcc" vim ~/.bash_profile 增加语句 export PATH=/disk3/myown/arm-gcc/bin:$PATH 保存退出后,

2017-05-24 14:16:09 7903 10

原创 02 uboot的常用命令及用法

uboot是bootloader的一种,主要是用于引导内核启动. uboot除此功能外, 还带有很多其它功能. 功能是通过命令来调用.uboot的命令: help //列出当前uboot所有支持的命令 help 命令 //查看指定命令的帮助 reset //重启uboot printenv //打印所有环境变量的值 printenv 环境变量

2017-05-23 13:19:00 7252 2

原创 01 OrangePi uboot编译

计算机系统的组成: CPU , 内存, 输入/输出设备, 外存(硬盘)单片机: 一个芯片上就是一个完整的计算机系统. SOC: 片上系统(system on chip), 其实就是功能更强大的单片机arm: 一种CPU核心(如:51(intel)). arm公司不会生产具体的硬件芯片, 只设计CPU核心.arm通过与芯片厂家合作, 生产基于arm核心的具体CPU芯片. 基

2017-05-22 13:24:52 8567 5

原创 21 QAudioOutput放音的坑与解决方法

其实在写博文http://blog.csdn.net/jklinux/article/details/72355485时,并没有测试放音,原以为就是一件很容易的事. 为了后期写音视频播放器时可以在QT用QAudioOutput放音(基本上所有案例都是调用SDL放音), 确定可行性。实实在在测试了一回,真的发现了问题。 QAudioOutput *aoutput = new QAudio

2017-05-22 01:05:55 16231 24

原创 linux下的epoll编程应用

例如实现用epoll读三个管道文件:test.c#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <sys/epoll.h>#include <stdlib.h>typedef struct { char *name; int fd;}mydata_t; //每个文件描述符都使用一个结构体变量

2017-05-21 14:04:14 769

原创 linux系统虚拟鼠标的实现

通过http://blog.csdn.net/jklinux/article/details/72570663博文可以得知:一个输入设备获取到的数据是以struct input_event为单位的。 而且鼠标的相对坐标事件中的type值为EV_REL时, code的值为REL_X时, value的正值表示右移,负值表示左移, 移动量为value

2017-05-21 12:11:42 3567

原创 linux下的输入设备编程

输入设备包括: 鼠标,键盘,触摸屏,手柄等。在linux系统里,如果设备已经驱动好的话(注意手柄在centos7里默认没有支持),可以查看:cat /proc/bus/input/devices:输出的信息: I: Bus=0019 Vendor=0000 Product=0001 Version=0000 N: Name="Power Button" P: Phys=PN

2017-05-20 10:42:23 1668

原创 05 ffmpeg桌面图像h264编码并封装avi

当ffmpeg获取桌面图像数据时, 数据格式是ARGB8888, 需要转换成yuv420p.ARGB8888 --> RGB888 --> yuv444 --> yuv420pY Y = 0.299 x R + 0.587 x G + 0.114 x B + 0 U Cb = -0.169 x R - 0.331 x G + 0.499 x B + 128 V Cr = 0.

2017-05-19 10:46:56 1970

原创 04 ffmpeg摄像头数据H264编码

yuyv(yuv422): 一行里的两个像素结合, 一个像素有(y, u), 另一个像素有(y, v). 还原rgb时两像素的数据需结合来使用.yuv420: 每两行的上下两个像素结合, 一行的两个像素只存(y, u, y), 下一行的两个像素只存(y, v, y)./////////////////////////////////////yuv444: y00u00v00 y01u

2017-05-18 17:38:55 4075

原创 03 ffmpeg调用声卡录制wav文件

头文件:#define __STDC_CONSTANT_MACROSextern "C" { #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libavdevice/avdevice.h>}AVInputFormat类型表示一种输入文件/输入设备的数据格式AVForm

2017-05-18 15:40:58 2595 4

原创 02 ffmpeg获取桌面图像的编程

头文件:#define __STDC_CONSTANT_MACROSextern "C" { #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libavdevice/avdevice.h>}AVInputFormat类型表示一种输入文件/输入设备的数据格式AVForm

2017-05-18 10:37:34 1654

原创 linux系统下用vim+ctags+cscope查看源码

ctags 用于把关键字生成一个索引表,在vim里可直接使用"ta 关键字"在索引表里查找并定位.cscope 也是生成索引表,在vim里使用"cs xx xx xx "来查找如查看ffmpeg-3.0的源码: 1). 在终端进入源码目录,输入"ctags -R *" // 会在当前目录下生成索引表文件, 文件名为tags 2). 在终端使用,需确保终端当前工作目录是在索引表文件ta

2017-05-18 00:05:19 2465

原创 linux下开发必备的工具

strace 可用于跟踪一个程序里使用了哪些系统编程函数 用法: strace 程序名 程序执行时的参数 ltrace  可跟踪程序里调用的库函数 用法: ltrace 程序名 file 可查看一个文件的类型 用法: file 文件名 如果file查看的是一个程序,可以查看到程序的位数, 大小端, 是否依赖动态库 如: fil

2017-05-17 23:08:57 2156

原创 linux系统下动静态库的制作

库: 就是代码编译出来的一种形式  动态库,静态库动态库: win系统上的dll文件, lin系统上的so文件. 代码编译成一个独立的库, 不专属于一个程序.任何程序都可以共用这个库. 这个库不管多少程序调用,只要在内存里存在一份就可以了静态库: win上的lib文件, linux上的.a文件 静态库只能与其它的代码一起编译链接生成一个程序,不能像动态库作为一个独立的库使用.

2017-05-17 23:00:38 996

原创 01 ffmpeg对摄像头的调用编程

库的分支: libavcodec // audio video codec 音视频的编解码库 libavformat // 与容器相关的操作. 文件的格式 libswscale // 转换数据格式 libavdevice // 操作如摄像头,声卡设备文件的库 libavfilter // 可加水印头文件:#define __STDC_CONSTANT_M

2017-05-17 17:36:16 3045

原创 ffmpeg在centos7上的编译

音视频的编码格式标准有很多种: mp3, acc, mpeg4, h264, h265 ….. 每个标准都有一个或多个编解码库, 如h264的库有libx264, mpeg4的库有xvid, h265的库有libx265 不同的库, 里面提供的函数及编解码操作流程都会不一样.  ffmpeg其实就把各种库的编解码接口统一标准化, 也就是学会一种接口后就可以通杀各种编解码库.当然ffmpe

2017-05-17 11:44:32 7216 3

原创 20 QT里的声卡编程

声音三要素: 采样率, 量化精度, 声道 通常我们用一位二进制表示两种状态, 如1表示高电平, 0表示低电平。在音频领域里,如只用一位二进制表示声音,那么只能表示发声和不发声两种状态(蜂鸣器)。如果使用过音频分析软件会发现,声音是由连续的不规则的波形来表示, 根本不可能用一位二进制数据表示一个人发出的声音。但可以用多位二进制的数据来表示(音频里通常是用8位或者16位). 如用8位数据表示 0

2017-05-17 00:38:27 5405 8

原创 poll, select与epoll的用法

多路IO复用: 就是实现同时监控多个文件描述符(此类文件描述符必须为不可操作时会进入堵塞状态), 会堵塞直到有一个或多个文件描述符可操作为止, 通过返回值找出可操作的文件描术符(可代替多线程工作).Linux下共有三个函数可完成此工作:一. poll函数 #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeo

2017-05-16 17:35:57 766

原创 19 QT 里的Ui文件

当我们的窗口上需要很多的控制时,自己写代码创建控件对象时,比较麻烦. QT里引入ui文件便于我们快速的设计界面.使用ui时, 一个类由三个文件组成. 头文件, 源文件, ui文件(负责通过拖拉控件来设置界面).ui文件其实是xml语言的文件, 用于描述窗口上的属性及控件的属性等 .编译时: QT里的编译器会用”uic”把ui文件转换一个ui_同名的头文件, 此头文件里其实就是把我们以前写的创建对象

2017-05-16 17:26:36 980

原创 18 QT里的摄像头编程

QT里用QCamera类操作摄像头. 用QCameraInfo类获取摄像头的信息qmake: QT += multimedia//获取所有能用的摄像头信息代码: QList<QCameraInfo> list; list = QCameraInfo::availableCameras(); for (int i = 0; i < list.size(); i++)

2017-05-16 15:51:06 3695 14

原创 17 QT里的uart编程

uart的介绍请参考http://blog.csdn.net/jklinux/article/details/72124110我们需要配置波特率,数据位,校验位,停止位, 硬件流件. 在QT里已封装成一个名为QSerialPort的类, 还有一个QSerialPortInfo类.qmake: QT += serialport用法: QSerialPortInfo 类用于查看当前系统有哪些可用

2017-05-16 12:25:05 2693

原创 QT组播实现多人屏幕共享的程序

QT组播实现屏幕共享的程序:发送端(共享屏幕服务端) :1. 获取桌面图像2. 编码成jpg3. 用udp组播发出.一张jpg大概100K, 每次传输4K字节, 需分成多次传输.每次桌面图像编码成jpg, 图像大小是不固定的. 每张图像传输第一次时,发出"newImage:长度", QUdpSocket成功发出个部分数据后, waitForBytesWritten等待发出,完成后再发出下一

2017-05-16 10:34:14 8106 25

原创 yuv数据格式介绍与rgb的转换,图像文件的封装

通常我们用RGB表示一种彩色。计算机系统里的LCD显示的数据就是RGB来表示每个像素的颜色。 而在我们生活里,有黑白电视机与彩色电视机两种,拍摄节目源时不可以用两种不同的摄像机来存放两种图像数据。 所以为了兼容两种电视机,专家就引入YUV格式代替RGB,其中Y表示亮度, U和V表示色差。 黑白电视机只用Y信号, 而彩色电视机可由YUV转换成RGB再显示颜色。通常我们所用的YUV格式是 ITU-R

2017-05-15 23:33:42 1690

原创 linux v4l2编程

参考文档: https://linuxtv.org/downloads/legacy/video4linux/API/V4L2_API/spec-single/v4l2.htmlv4l2 : video for linux api two version //也就是linux系统下视频设备驱动好后,应用程序怎样调用相关的视频设备的编程接口 视频设备: 摄像头, 硬件编解码设备, 图形加速等。

2017-05-15 21:10:20 2764

原创 linux uart编程

串口: 每次传输是按位为单位进行传输的接口. 如uart, usb, 网络, sata. 一般就是只用一根数据线来接收或发送数据。 并口: 每次传输是两位或以上为单位进行传输的接口. 一般会用多根数据线来接收或发送数据.单工: 只能单向传输的导线 半双工: 可以双向传输的导线,但某一时刻只能一个方向传输 全双工: 可以同时双向传输, 一般用两根单向导线实现uart: 通用异步接收传送器(串口

2017-05-15 11:59:28 5457 6

基于QCamera, QTcpServer实现网络视频监控

基于QCamera, QTcpServer实现网络视频监控. 支持多客户端. 文档说明: http://blog.csdn.net/jklinux/article/details/75072993

2017-07-13

qt mp3录音程序

qt里简单的mp3录音程序,使用lame编码库. 程序执行时开始录音并编码成mp3存放在”/my.mp3”, 直到程序退出执行 说明文档: http://blog.csdn.net/jklinux/article/details/72815790

2017-05-31

ffmpeg桌面图像h264编码并封装avi

ffmpeg桌面图像h264编码并封装avi. http://blog.csdn.net/jklinux/article/details/72519344

2017-05-19

ffmpeg摄像头数据h264编码并封装avi

ffmpeg摄像头数据h264编码并封装avi http://blog.csdn.net/jklinux/article/details/72478004

2017-05-18

原创 qt 组播实现的屏幕共享程序 

原创qt 组播实现的屏幕共享程序. 更多例子: blog.csdn.net/jklinux 

2017-05-16

原创 qt数据库操作简例

原创 qt数据库操作简例 教程: http://blog.csdn.net/jklinux/article/details/72081872

2017-05-15

qt网络组播程序 

qt网络组播程序 

2017-05-15

qt实现的tcp网络聊天室

qt实现的tcp网络聊天室

2017-05-14

qt录屏程序源码

qt录屏程序源码

2017-05-12

qt贪吃蛇游戏源码

qt贪吃蛇游戏源码

2017-05-12

qt贪吃蛇源码

2017-05-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除