Linux
文章平均质量分 78
徐kun按门铃
越来越靠近那个更喜欢的自己!
展开
-
IMX6ULL——芯片启动方式笔记
I.MX6ULL支持多种启动方式,比如可以从 SD/EMMC、NAND Flash、QSPI Flash等启动从 SD 卡启动就需要在 bin 文件前面添加一个数据头,其它的启动设备也是需要这个数据头。启动方式选择:BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置来选择 BOOT 方式。BOOT_MODE[1:0]的值是可以改变的,有两种方式,一种是改写 eFUSE(熔 丝)(只能改变一次),一种是修改相应的 GPIO 高低电平。BOOT启动方式原创 2020-09-18 20:23:56 · 1327 阅读 · 0 评论 -
树莓派串口,SSH登录
一,树莓派刷机树莓派刷机需要两个东西:树莓派镜像和烧录工具;树莓派镜像可以从官网下载,有了两样东西后格式内存卡然后往里面烧录就行;二,串口登录树莓派树莓派默认源中串口和蓝牙相连接,需要断开蓝牙1.打开SD卡根目录的"config.txt"文件,将以下内容添加在最后并且保存。dtoverlay=pi3-miniuart-bt//这样就停止了蓝牙,解除了对串口的占用2.然后再修改根目录的"cmdline.txt",将里面的内容全部替换成以下内容,以防万一,请先备份好这个文件的原内容dwc_ot原创 2020-09-20 23:12:57 · 712 阅读 · 0 评论 -
树莓派vim更新
概述:一般的linux系统刚开始vim编辑器不适合我们使用,需要更新之后使用一般先换源(Ubuntu一般不用换源)刚刷完系统直接apt-get 安装vim的时候失败,树莓派默认源是国外网站(无法正常下载东西)树莓派换源:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak //保留备份源文件 sudo nano /etc/apt/sources.list //编辑文件加入相关源地址,官方源地址为:deb http原创 2020-09-20 23:30:48 · 244 阅读 · 0 评论 -
树莓派和主机实现文件互传
传输条件:主机需要安装FileZilla,这是我们经常用的FTP客户端树莓派需要安装FTP服务端,(安装vsftp)一,在树莓派安装vsftpsudo apt-get install vsftp//安装vsftp命令sudo vi /etc/vsftp.conf//配置vsftp选项如下(去掉注释)然后启动vsftp服务sudo service vsftpd start二,在主机上配置客户端1,打开FileZlia客户端,并且打开站点配置,2,新建站点3,输入IP地址原创 2020-09-24 21:42:18 · 343 阅读 · 0 评论 -
使用多进程实现简单socket并发问题
概述:socket函数有时候需要支持多个客户端,需要接受来自不同客户端的数据,实现这种目的可以引用多线程,多进程等方案。socket创建以及监听的步骤是创建套接字、绑定IP和端口号、监听客户端请求,数据交互。很明显要想实现并发支持多客户端访问,需要在accept的时候做出改变。在socket链接套接字的时候会阻塞(不出错和没有信号干涉),说明正常情况下是每当有客户端接入才会停止阻塞,如果用多进程思想的话:accept函数所在进程只是去“接待”客户端,所以每当有客户端接入在accept接待之后使用for原创 2020-10-17 19:55:23 · 892 阅读 · 0 评论 -
使用select函数简单实现不同源IO的处理
概述:对来自不同源端的IO处理是很重要的,可以有多重形式出现,比如,用fgets函数获取中断输入和别的比如accept函数,都是需要阻塞,但是不知道哪个缓冲区先准备好,所以程序会发生阻塞,出现一些我们不想看到的结果。监视多个文件描述符的一种方法是为每个描述符创建一个进程(各自使用独立的进程),但是由于进程消耗太大,虽然程序健壮,但是浪费严重,而且父子进城回收时也要防止子进程编程僵尸进程等问题。如下程序中的阻塞问题#include <stdio.h>#include <stdlib原创 2020-10-16 18:10:13 · 72 阅读 · 0 评论 -
通用的IO模型(二)——深入探究文件IO
概述了原子操作在文件操作时候的重要性和fcntl(0函数的使用以及重定向,还提到了文件描述符和文件的关系(文件描述符表和系统级文件表i-node表)。。原创 2020-10-15 15:39:49 · 84 阅读 · 0 评论 -
通用的I/O模型(一)——文件的基本操作
主要描述了大概通用的文件IO模型的相关系统接口原创 2020-10-14 00:21:53 · 115 阅读 · 0 评论 -
一个简单的linux内核驱动
一,内核结构简单概述上层程序操作设备驱动简单概述:在用户空间使用相关的c库,比如open函数会造成一个中断,系统会去调用sys_call函数(系统调用),然后会去调用相关的sys_open函数,在内核空间的时候会去驱动链表里面查找对应的外设驱动,我们编写完驱动程序,加载到内核,内核会去调用相关的驱动open函数二,字符设备驱动简单概述字符设备是3大类设备(字符设备、块设备、网络设备)中较简单的一类设备、其驱动程序中完成的主要工作是初始化、添加和删除 struct cdev 结构体,申请和释放设备号原创 2020-10-08 16:32:17 · 391 阅读 · 0 评论 -
树莓派linux内核的编译和烧录
一,树莓派内核源码的获取和交叉编译工具的获取树莓派的github主页:https://github.com/raspberrypi,里面包含了linux源码、交叉编译工具链等内容。对于我们要用到的有下面两个内容:https://github.com/raspberrypi/linux 内核源码https://github.com/raspberrypi/tools 交叉编译工具链(仅在交叉编译时用到)可以在官网下载也可以直接在命令终端输入获取linux内核源码:git clone github原创 2020-10-05 22:59:40 · 696 阅读 · 1 评论 -
Linux的软链接和硬链接概念
一,软链接1,概念:- 软链接文件有类似于Windows的快捷方式。-在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。-你选定的位置上生成一个文件的镜像,不会占用磁盘空间2,如何创建软链接ln -s xxx.so.2.50 xxxx.so 指令 参数 要被链接的文件 软链接文件名字注:ln -s 是linux中一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s。3,注意:第一,ln命令会保持每一处链接文原创 2020-10-05 18:30:19 · 241 阅读 · 0 评论 -
树莓派交叉编译工具链的安装
1,交叉编译的概念:交叉编译 是在一个平台上生成另一个平台上的可执行代码。比如,我们再windows上面编写C51代码,并编译成可执行代码,如xx.hex,是在c51上面运行,不是在windows上面运行我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,不是在ubuntu linux上面运行。编译:是在一个平台上生成在该平台上的可执行代码 宿主机(host) :编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。目标机(target):原创 2020-10-05 00:14:26 · 255 阅读 · 0 评论 -
树莓派上摄像头Mjpg-streamer实时视频显示
概述:原创 2020-09-26 17:25:14 · 952 阅读 · 0 评论 -
Linux动态库和静态库创建和简单使用
概述:库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。一,静态库:静态函数库,是在程序执行之前(编译的时候)就加入到目标程序中去了;类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。...原创 2020-09-21 21:12:03 · 138 阅读 · 0 评论 -
linux系统编程——套接字编程学习
一,字节序主机字节序与网络字节序主机字节序主机字节序就是我们平常说的大端和小端模式:不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保存的顺序,这个叫做主机序。标准的大端模式(Big-Endian)和L小端模式(Little-Endian)的定义如下 小端模式Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 大端模式Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。网络字节序网络字节顺序是TCP/IP中原创 2020-09-11 23:55:25 · 129 阅读 · 0 评论 -
linux系统编程——套接字相关API学习
socket(协议方案,数据流/快形式,附加协议)函数介绍:#include<sys/types.h>#include<sys/socket.h>int socket(int domain, int type, int protocol);//设置网络协议创建一个句柄,成功调用返回套接字描述符,失败返回错误码domain参数指明所使用的协议族,通常为AF_INET,表示互联网协议族(TCP/IP协议族);通信协议族在文件sys/socket.h中定义。AF_INE原创 2020-09-10 13:33:34 · 234 阅读 · 0 评论 -
linux学习——vi编辑器学习
vim编辑器1,Linux下分文件编程:和单片机上的头文件定义一样,在头文件里面要写#ifndef __TEST_H#define __TEST_Hvoid test(void);#endifgcc编译时放在一起即可,头文件<>表示默认在路径/usr/incude/里面去找 " "表示在当前文件夹里面去找一般使用双引号<2>动态库和静态库程序函数库分为三种:动态函数库和静态函数库以及共享函数库;区别主要是加入的时间不同静态库:是在程序执行前就加入到目标程原创 2020-09-09 22:24:49 · 123 阅读 · 0 评论 -
linux文件系统和文件系统结构
~Linux文件颜色含义:绿色------可执行文件,红色-------压缩文件深蓝色--------代表目录浅蓝色---------代表链接文件灰色------代表其他一些文件~Linux文件系统结构1,文件系统概述:<1>概念:文件系统是操作系统用于明确存储设备或分区的文件的方法和数据结构;即在存储设备上组织文件的方法。,<2>Linux文件系统类型:在 Windows 下有 FAT、NTFS 和 exFAT 这样的文件系统,在 Linux 下又有哪些文件原创 2020-09-09 22:08:22 · 136 阅读 · 0 评论 -
linux系统编程——线程学习
~线程基本概念:线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体;进程相当于运行中程序的一种抽象。根据运行环境的调度者的身份,线程可分为内核线程和用户线程。内核线程,在有的系统上称为LWP(Light Weight Process,轻量级线程),运行在内核空间,由内核调度;用户线程运行在用户空间,由线程库来调度。当进程的一个内核线程获得CPU的使用权时,它就加载并运行一个用户线程。可见,内核线程相当于用户线程运行的‘容器’,一个进程可以拥有M个内核线程和N个用户线程,其中M<=N,并且原创 2020-09-09 21:50:53 · 226 阅读 · 0 评论 -
linux系统编程——信号量的编程学习
信号量概述:信号量和前面所说的IPC(管道,FIFO,消息队列等)有所不同,它是一个计数器,用于为多个进程提供对共享数据的访问,信号量是一种特殊的变量,访问具有原子性,信号量只允许对它进行两个操作:<1>等待信号量当信号量的值为0时,程序等待;当信号量的值大于0时,信号量的值减一,程序继续运行;<2>发送信号量将信号量的值加一;我们使用信号量,来解决进程或线程间共享资源引发的同步问题:(1)测试控制该资源的信号量(2)若此信号量的值为正,则进程可以使用该资源,在这种原创 2020-08-29 23:00:10 · 286 阅读 · 0 评论 -
linux系统编程——进程信号编程
信号概述:信号就是软件中断,很多比较重要的应用程序都需要处理信号。信号为linux提供了一种处理异步事件的方法。信号是异步的,一个进程不需要通过进行别的操作来等待信号,比如在终端输入ctrl + c来中断程序,会通过信号机制停止一个程序或者及早终止管道的下一个程序。1,信号名字和编号信号一般都为"SIG"开头,信号函数和结构体等定义在头文件signal.h中,信号编号都为正整数。信号一般用kill -l查看信号编号等,如下:上图1-31的信号是早期linux所支持的信号,是不可靠信号(非实时的)原创 2020-08-29 14:42:12 · 182 阅读 · 0 评论 -
linux系统编程——进程共享内存通信
~共享内存概述:共享内存,就是允许两个或者多个不同的进程访问同一个给定的内存,因为数据不需要在进程复制,所以共享内存是最快的一种IPC,不同的进程将同一段物理地址映射到各自的进程中,如果一个进程向共享内存写数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。~注:当一个进程在共享内存处写入数据时不应该别的进程去读(共享内存不提供同步机制)。~注:它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。1,共享内存相关的API #include <sys/ipc.h&原创 2020-08-25 19:47:57 · 114 阅读 · 0 评论 -
linux系统编程——进程管道通信
1,进程间通信概述上面两节所说的fork函数和exec族函数如果放在进程间通信,他们共享数据有限。所以引入了进程之间相互通信的其他技术——IPC。IPC类型:管道(无名管道,命名管道),消息队列,共享内存,信号量,socket套接字(支持不同主机IPC)等。2,管道通信原理管道通常指无名管道,是Unix系统IPC最古老的的形式~管道是半双工的(数据只能在一个方向传输),具有固定的读端和写端,~管道只能用于血缘关系的进程通信(fork创建的父子进程)~...原创 2020-08-24 02:29:34 · 136 阅读 · 0 评论 -
linux系统编程——exec族函数和system函数
一,exec族函数exec调用失败返回错误码.表示当前目录当我们用fork创建子进程后,经常调用exec族函数去执行新的可执行文件。注:调用exec族函数并不创建新进程所以进程ID不变。exec函数族分别是:execl, execlp, execle, execv, execvp, execvpe#include <unistd.h>extern char **environ;int execl(const char *path, const char *arg, ...);原创 2020-08-22 23:51:39 · 373 阅读 · 0 评论 -
linux学习——基本shell命令
一,shell的基本命令以及拓展;Linux文件颜色含义:绿色------可执行文件,红色-------压缩文件深蓝色--------代表目录浅蓝色---------代表链接文件灰色------代表其他一些文件1,目录信息查看命令:ls -xxls -a:可以列出所有文件,包括隐藏文件,比如以.开头的;ls -l:列出文件的详细信息(创建者,创建时间,文件权限等);ls -t:将文件按照创建时间列出ls -R:递归列出所有文件包括子目录的文件注:命令参数可以组合,如:ls原创 2020-08-22 14:54:38 · 256 阅读 · 0 评论 -
linux系统编程——进程消息队列通信
简要概述:消息队列就是存放在内核中的链表,不同的进程找到它并且依据它来传输数据(发送或者接受),必须找到同一个链表并且接受和发送的数据类型相同;使用消息队列1,msgget函数;常用方式:msgid = msgget(0x1234,IPC_CREAT|0777); if(msgid == -1){ printf("error\n"); }注意key值可以用函数frok获取: key_t key; key = ftok(".",'z'); printf("key =原创 2020-08-25 00:59:16 · 163 阅读 · 0 评论 -
linux系统编程——进程基本知识
Linux进程的相关概念;进程就是“跑起来的程序”;如何查看进程:用ps -aux指令或者top指令来查看;进程ID可以用getpid()获取;C语言的程序内存分配如下:2,创建进程函数fork()使用:用fork()创建一个进程,子进程会从fork函数的地方再次执行以下程序段:#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(){ pid_t原创 2020-08-22 19:17:51 · 96 阅读 · 0 评论