- 博客(42)
- 收藏
- 关注
原创 我所理解的内核链表
内核链表内核链表与传统链表不一样,传统链表数据域与指针域都是用户自定义的,而是内核链表数据域是用户定义,但是指针域是内核链表头文件中已经定义好的了。内核链表 :头节点无效,双向循环链表指针域结构体的结构内核链表头文件:kernel_list.hstruct list_head { struct list_head *next; -> 后继指针 -> 指向下一个节点指针域的结构体的地址 struct list_head *prev; -> 前驱指针 -> 指向
2020-05-27 08:54:59
406
原创 复杂链表特点
单向链表特点在结构体中只能有一个后继指针,在链表最后一个节点指针域指向NULL。如果说单向链表是循环的,那么最后一个节点指针指向头节点。单向循环链表与单向链表差异?初始化链表? -> 单向链表指针域指向NULL,但是单向循环指向头节点。尾插? -> 尾插节点指针域指向head,寻找最后一个节点时,看看这个节点的指针域是否指向head头插? -> 与单向不循环链表一致根据特征值寻找节点? -> 从头节点下一个节点开始寻找,只要p本身不为hea
2020-05-21 09:07:49
331
原创 我初识链表
数组与链表区别数组:从栈空间中申请一些连续的字节数,使用变量间接访问这片内存空间,在定义时必须声明空间的大小。例子: int A[5] -> 连续申请20个字节A[0] A[1] ->使用变量间接访问这片内存空间5 -> 必须声明空间的大小链表:可以利用堆空间一些零碎空间,这些空间不需要连续的,使用内存上地址联系在一起的,不需要声明空间的大小!原理:每一个内存中除了存放内存空间中本身有的数据,还存放着下一个内存空间的地址。数组与链表如何访问下一个成员?数组中每一个成员
2020-05-21 09:04:44
254
原创 ioctl()使用案例
一、ioctl()使用案例1、LCD驱动struct fb_var_screeninfo vinfo;int lcd = open("/dev/fb0", O_RDWR);ioctl(lcd, FBIOGET_VSCREENINFO, &vinfo);打开液晶屏后,向液晶屏驱动发送命令FBIOGET_VSCREENINFO,得到液晶屏的数据vinfo。命令:FBIOGET_VSCREENINFO----获取液晶屏硬件参数的命令数据:struct fb_var_screeninfo-
2020-05-21 09:00:06
1089
原创 imx8m通过nfs挂载访问虚拟机内容
首先,需要在设置虚拟机的网络,桥接以太网,使虚拟机与开发板在同一网关下且虚拟机与开发板能够相互ping通(若能够相互ping通,请忽略)设置与开发板的IP,在开发板上执行:ifconfig eth0 192.168.18.8Ps:我虚拟机的IP为:192.168.18.88查看虚拟机与开发板是否能相互ping通虚拟机上执行$ ping 192.168.18.8开发板上执行:#ping 192.168.18.88能够相互ping通后,虚拟机上执行$ sudo vi /etc/exports
2020-05-20 09:04:50
451
转载 mplayer移植
主机平台:UBUNTU16.04硬件平台:MYZR-IMX8M-EVK内核版本 :linux-4.14.98交叉编译链:aarch64-linux-gnu-gcc文件系统:fsl-image-validation-myimx8m.tar.bz2source /home/jj/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env编译zlibmplayer依赖zlib,先下载zlibhttp://ww
2020-05-18 16:38:14
440
原创 alsa移植
下载:https://www.alsa-project.org我下载的为:alsa-lib-1.2.2.tar.bz2alsa-utils-1.2.2.tar.bz2source 交叉工具链$ source /home/jj/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env解压:$ cd ~/my-work/transplant/alsa$ tar xjvf alsa-lib-1.2.2.t
2020-05-15 11:14:35
335
转载 ffmpeg移植
解压:$ cd ffmpeg设置环境变量:$ source /home/myzr/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env(注意:都要编译都要设置环境变量)编译:配置configure脚本$ ./configure --prefix=/home/myzr/my-work/source_tar/ffmpeg/install --enable-shared --disable-static
2020-05-15 11:12:35
184
原创 使用WinSCP在PC,虚拟机和开发板中互传文件
WinSCP为了开发生产中更方便地在linux虚拟机->windows->开发板中传输文件,给大家介绍一个方便的文件互传小工具。WinSCP特点图形用户界面多语言与 Windows 完美集成(拖拽, URL, 快捷方式)支持所有常用文件操作支持基于 SSH-1、SSH-2 的 SFTP 和 SCP 协议支持批处理脚本和命令行方式多种半自动、自动的目录同步方式内置文本编辑器支持 SSH 密码、键盘交互、公钥和 Kerberos(GSS) 验证通过与 Pageant(PuT
2020-05-14 10:47:58
1201
转载 驱动简单编译
在网上下载usb驱动 AX88772C_772B_772A_760_772_178_Linux_Driver_v4.24.0_Source.tar.bz2拉到ubuntu的samba将源码包解压到imx6的源码目录下的驱动目录中 输入以下指令:tar -xvf AX88772C_772B_772A_760_772_178_Linux_Driver_v4.24.0_Source.tar.bz2 -C ~/my-work/02_source/linux-4.1.15/drivers/net/usbcd进入此
2020-05-13 09:53:58
529
原创 IMX8M学习-驱动简易框架与分类
今天来聊聊Linux的驱动Linux设备驱动时Linux系统中必不可少的一个重要组成部分。linux的应用程序是不能直接访问硬件的,必须要通过驱动才能访问硬件。具体的步骤是:Linux应用程序—>Linux设备驱动程序—>访问硬件例如图形显示:Linux系统IO函数(应用程序)—>显卡的驱动程序—>显卡和液晶屏硬件每个硬件都需要有自己的驱动程序,驱动程序给应用程序提供的是一个标准的接口#驱动框架Linux设备驱动的分类1.字符设备驱动应用程序和驱动程序之间是按照字
2020-05-13 09:45:05
785
转载 ffmpeg移植到MYZR-iMX8M开发板
下载:http://ffmpeg.org/解压:$ cd ffmpeg设置环境变量:$ source /home/myzr/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env(注意:都要编译都要设置环境变量)编译:配置configure脚本$ ./configure --prefix=/home/myzr/my-work/source_tar/ffmpeg/install --enable-sh
2020-05-09 14:53:55
695
1
转载 memtester内存测试工具移植到myzr-imx8m开发板中测试
1.下载源码:http://pyropus.ca/software/memtester/2.创建编译目录:$ mkdir /home/myzr/my-work/source_tar/memtester把下载的源码放入此目录中3.解压进入源码目录:$ tar xvf memtester-4.3.0.tar.gz$ cd memtester-4.3.0/4.配置交叉编译环境变量:$ source ~/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x
2020-05-09 14:50:11
365
转载 IMX8M学习--vnc搭建
在MYZR-IMX8M-EVK上搭建vnc一:使用ubuntu或者安卓系统.安装xrdp=>sudo apt-get install xrdp安装xfce4=>sudo apt-get update=>sudo apt-get install xfce4.配置xfce4=>echo “xfce4-session”>~/.xsession继续配置xfce...
2020-05-08 08:51:14
705
转载 IMX8M学习--ubuntu根文件系统制作
1.准备工作1.1下载最小文件系统到ubuntu网址 下载相应的最小系统(本文以 ubuntu-base-16.04.5-base-arm64.tar.gz 为例)1.2安装模拟器工具$sudo apt-get install qemu-user-static2.解压最小系统$mkdir ubuntu-rootfs$sudo tar -xvpf ubuntu-base-16.04.5...
2020-05-06 10:44:42
1489
原创 Linux C--shell总结
shell脚本中变量定义shell语法中变量定义规则与C语言一致,只能使用数字,字母,下划线组成,并且不能以数字开头!shell变量不需要声明数据类型,因为所有变量都是默认是字符串类型。C语言: int a / char b /char * cshell: a -> 默认是字符串类型shell语法中为变量赋值时,等号的两边绝对不允许有空格!C语言: int a = 100; /...
2020-04-30 11:51:34
1682
原创 Linux C--shell的helloworld
使用shell语法来编写出来的程序,这个程序叫shell脚本。shell语法不同于C语言,有独特变量定义与赋值,循环结构,判断语句…其实在英文翻译shell ->“贝壳”。在贝壳的外部是用户空间,在贝壳内部是内核空间,用户与内核之间进行交互时,就一定要通过shell。二. 既然shell是可以解析用户输入的命令,究竟是谁来解析?其实命令行是由于bash进程打印出来,而命令一定要写在命...
2020-04-29 08:54:02
281
原创 Linux C系统编程-线程条件变量(六)
条件变量条件变量必须与互斥锁一起连用,条件变量中的线程不会主动醒来,而是要等待别的线程唤醒条件变量。条件变量的函数接口1)初始化一个条件变量pthread_cond_init()动态初始化:ond:未初始化的条件变量的地址 pthread_cond_t 条件变量的地址类型attr:属性 普通属性NULL失败返回错误码静态初始化: pthread_cond_t cond ...
2020-04-28 09:40:17
161
原创 Linux C系统编程-线程读写锁(五)
读写锁读锁: 共享锁 多个线程可以同时上锁,可以多个线程一起读取数据。写入: 互斥锁 多个线程不可以同时上锁,不可以多个线程一起写入数据。1)初始化读写锁 pthread_rwlock_init()rwlock: 未初始化读写锁变量的地址attr: 普通属性 NULL失败返回错误码2)读锁上锁 pthread_rwlock_rdlock()rwlock: 已初始化...
2020-04-28 09:39:50
273
原创 Linux C系统编程-线程互斥锁(四)
互斥锁互斥锁也是属于线程之间处理同步互斥方式,有上锁/解锁两种状态。互斥锁函数接口1)初始化互斥锁pthread_mutex_init()man 3 pthread_mutex_init(找不到的情况下首先sudo apt-get install glibc-docsudo apt-get install manpages-posix-dev)动态初始化int pthread_...
2020-04-28 09:38:17
392
原创 Linux C系统编程-线程取消例程和同步互斥 (三)
线程取消例程函数当线程收到取消请求时,先不要马上响应取消请求,首先执行一个线程的例程函数,执行完这个函数再响应取消。一般地,线程取消例程函数里面都是写一些释放公共资源的内容、在Linux系统,公共资源中的互斥锁,条件变量。使用线程取消例程函数,是为了防止线程带着系统公共资源一起被取消,如果带着系统资源而退出,则其他的线程就无法再次使用该资源。只需要在线程中调用pthread_cleanu...
2020-04-24 09:21:09
313
1
原创 Linux C系统编程-线程退出(二)
线程的取消。功能:send a cancellation request to a threadthread: 需要取消的子线程的ID号默认创建的子线程都是可以响应取消请求。例题: 主线程发送取消请求给子线程,看看子线程情况。#include “head.h”下面展示一些 内联代码片。void *routine(void *arg){ int i; for(i=0;i<...
2020-04-23 09:11:32
251
原创 Linux C系统编程-线程创造(一)
进程是当./程序时,开启了新的进程,系统拷贝父进程内存空间而产生一个新的进程,此时内存空间就会翻倍。进程是系统中最小资源分配单位。当进程退出时,其他进程都不会受到其影响。int main() // 单线程的进程。{xxx;return 0;}线程线程是一个进程内部的资源,是系统中最小的调度单位。当进程退出时,其内部的所有线程都会退出。线程的函数接口线程函数接口存在于线程库。在...
2020-04-22 09:06:48
190
1
原创 Linux C系统编程-进程之间的通信IPC(六)
IPC对象在linux系统,消息队列/共享内存/信号量都是属于IPC对象。假设创建一条消息队列,等于创建了一个IPC对象。动作返回结果( 代表相对应的IPC对象)访问文件文件描述符创建消息队列消息队列ID创建共享内存共享内存ID创建信号量信号量ID查看命令:~$ ipcs -aMessage Queueskey msqid ...
2020-04-21 12:01:18
276
原创 Linux C系统编程-进程之间的通信信号(五)
进程之间的通信方式–信号信号kill命令使用"kill -l"命令查看所有的信号。 "kill"命令在linux下不是"杀死"含义,而是专门用于发送信号。 “-l” list1,2,3…64代表信号值SIG代表信号前缀HUP代表信号名字这些宏定义是被定义在一个信号专属的头文件: /usr/include/asm-generic/signal.h 给进程PID号发送信号 : kil...
2020-04-20 09:15:54
272
原创 Linux C系统编程-进程之间的通信管道(四)
进程之间的通信无名管道无名管道其实是一个数组来的,里面存放着读端与写端的文件描述符。作用范围有亲缘关系的两个进程。初始化无名管道man 2 pipepipefd: 具有两个int类型成员的数组的首元素地址。返回值:成功:0失败:-1int fd[2];pipe(fd); 结果: fd[0]->读端 fd[1]->写端实现使用无名管道,使得父子进程之间通信。...
2020-04-17 10:31:33
287
原创 Linux C系统编程-进程exit,exec和内存资源(三)
进程的退出 exit()/_exit()1.进程退出函数作用是什么?当进程执行了exit()/_exit(),整个进程就会马上退出。int main(int argc,char *argv[]) { if(argc!=2) //如果传递的参数不等于2个 { exit(-1); //那么就直接退出进程 } exit(0); }2.函数如何使用?exit() ...
2020-04-17 10:07:30
287
原创 Linux C系统编程-进程创造(二)
进程函数接口单进程程序 只能一行一行代码地去执行!为了可以实现同时处理多个任务,那么引入多进程。如何创建新的进程? 使用 fork()man 2 fork功能:create a child process -> 创建新的子进程使用格式:#include <unistd.h> pid_t fork(void);参数: 无返回值: pid_t ...
2020-04-15 17:28:40
146
原创 Linux C系统编程-进程概念(一)
1什么是程序?什么是进程?二者有什么区别?程序是一堆待执行的代码。 -> 静态的文本数据。 project.c (C程序) / project (可执行程序)进程是当程序被CPU加载时,根据没一行代码做出相应的动作,才能形成一个真正动态的过程,那么这个过程就称之为进程! -> 动态过程!2 如何在linux中开启新的进程?在linux执行程序即可。程序: projec...
2020-04-14 14:12:53
215
原创 IMX8M学习--MYZR-i.MX8M-EVK更换文件系统rootfs
给开发板更换系统Linux 系统构造更换文件系统rootfsLinux 系统构造Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。最基本的操作系统结构则是由内核、shell和文件系统一起组成的。例如下图:Linux内核首先Linux内核是linux系统的最重要的东西,各种linux发行版(linux系统)都是基于这个内核添加自己设计的文件系统加上shell组成的...
2020-04-13 10:40:52
736
原创 IMX8M学习--MYZR-i.MX8M-EVK网络应用编程(广播)
一、广播的概念1、 广播其实就是给同一网段主机发送消息,属于"点对多"。2、 广播特点1)只有UDP协议才能使用广播属性。2)广播并不是循环给每一个点发送数据,而是给广播地址发送消息。3、 广播地址是哪个?@ubuntu:~$ ifconfigeth0 Link encap:Ethernet HWaddr 00:0c:29:79:40:ddinet addr:192.1...
2020-04-10 09:27:29
197
原创 IMX8M学习--MYZR-i.MX8M-EVK网络应用编程(UDP)
UDP协议1、与TCP协议对比相同:UDP协议与TCP协议一样,都是属于网络体系模型中传输层。不同:UDP协议面向一种无连接方式,不可靠方式。 类似 现实例子: 寄信2、 UDP协议的工作流程服务器: 只需要创建套接字socket与绑定地址bind,不需要设置监听listen与接收accept。客户端: 只需要创建套接字socket,不需要连接connect。在UDP协议中,不能使...
2020-04-09 10:14:34
247
原创 IMX8M学习--MYZR-i.MX8M-EVK网络编程进阶(TCP)
一、网络编程IO模型1、 阻塞IO : 一直等待数据的到达!2、 非阻塞IO : 询问数据是否到达,如果没有数据,则不会阻塞,会马上退出!二、设置非阻塞IO的步骤1、 建立一个文件描述符 : 默认都是阻塞!2、 设置非阻塞属性给文件描述符 : 文件描述符就是非阻塞!3、 再调用accept()/read()/recv()/recvfrom() :非阻塞读取。三、 如何给文件...
2020-04-08 17:27:59
249
原创 IMX8M学习--MYZR-i.MX8M-EVK网络应用编程(TCP)
一、 系统编程通信方式特征都属于同一台主机内部通信,通信方式:有名管道/无名管道/信号/消息队列/共享内存缺点: 无法跨主机通信 -> 如何实现跨主机? -> 套接字socket()编程二. 网络编程1、 网络体系结构模型OSI模型: 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 -> 7TCP/IP协议模型: 应用层 ...
2020-04-07 11:59:46
347
原创 IMX8M学习--MYZR-i.MX8M-EVK设备树实战配置(八)
我们在linux/arch/arm64/boot/dts/myzr中可看到我们的设备树文件,那么我们打开一个设备树文件myimx8mek300.8mq.dts图一东西不多,就几行代码,我们打开 include主要的内容都在myimx8mq-ek300.dts中,在这个设备树文件中又包含了一个myimx8mq.dtsi文件。图二我们主要更改的是.dtsi之外的其他设备树。就想内存节...
2020-04-07 07:40:20
1262
原创 IMX8M学习--MYZR-i.MX8M-EVK设备树的语法(七)
@TOC设备树的有关名词在学习设备树之前,应该先了解一下设备树有关的缩写名词,要知道其英文全称,以便于在查阅文献和正式的生产不会总是访问小度或者打开翻译软件。缩写名词:DT:Device Tree 设备树FDT:Flattened DeviceTree 展开设备树OF:Open Firmware 开放式固件,一般在驱动获取节点信息时使用的API时,会提到DTS:device tree...
2020-04-02 09:06:44
662
原创 IMX8M学习--MYZR-i.MX8M-EVK内核使用设备树的过程(六)
设备树过程分析启动过程信息启动过程从.dts文件编译成.dtb文件,.dtb用于bootloader,bootloader就是uboot。uboot的作用是什么呢?1.用来启动内核2.加载.dtb文件在设置启动参数中我们可以看得很清楚设置了启动参数就是为了加载内核,启动内核,将dtb文件加载到内存中,使用bootm启动。内存从0x40000000开始,uImage存放在0x41000...
2020-04-01 09:53:19
655
原创 IMX8M学习--MYZR-i.MX8M-EVK设备树简介(五)
设备树简介设备树的由来设备树特性快速编译设备树DTC(Device Tree Compiler)学习MYZR-i.MX8M-EVK开发板过程中,官方提供了资料在.dts中修改设备树参数进行硬件的配置。在嵌入式底层开发中移植驱动时,大多会遇到修改.dts文件,很多人都会按照模板修改,按照的是网上或者厂家例程做出修改,却不知道此为何物。设备树的由来设备树是linux内核在3.x版本开始引进的概念...
2020-03-31 10:10:14
1155
1
原创 IMX8M学习--MYZR.iMX8MEVK驱动和设备(四)
MYZR.iMX8MEVK驱动和设备系统环境说明操作说明驱动及相关设备文件系统环境说明编译主机CPU架构:64位编译主机系统:LinuxLinux发行版:UbuntuUbuntu版本类型:服务器版Ubuntu版本号:14.04.1Ubuntu系统类型:x86-64注意:开发主机请使用ubuntu 14.04.1 x86-64(桌面版或服务器版均可),使用其他发行版的Linux或Ub...
2020-03-30 15:54:38
1146
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人