linux
英雄的小白
IC设计验证; C/C++;嵌入式软件;linux系统
展开
-
Uboot学习笔记(八)
Linux启动时进入倒计时 可以通过空格键 进入uboot 通过help、?查看哪些command通过 <?command>查看具体命令的详细解释在u-boot中从bootcmd中设置从flash读取内核的地址分区代码里规定好的,关键是起始地址,然后大小设置好这些参数之后,内核从地址0x3000d开始读取参数...原创 2021-04-08 17:55:09 · 106 阅读 · 0 评论 -
Linux驱动学习笔记(七)
驱动完成结构体注册,可以想象内核中是一个数组,存放设备号,驱动程序通过入口函数注册设备号并携带结构体与name驱动程序的三种方式:1、传统驱动模型2、总线设备驱动模型3、总线设备驱动+设备树模型内核运行时会去解析Dts设备树文件传统的驱动程序由于硬件的配置信息的改变,针对同一芯片或者不同芯片,会有大量基本重复的驱动程序(只是硬件配置信息不一样),为了避免内核的臃肿,采用了设备树模型设备树指定硬件资源 完全取决于写驱动程序的人设备树compatible为了找驱动程序,如果和驱动程序不一样.原创 2021-04-08 17:52:30 · 96 阅读 · 0 评论 -
Linux开机自启动脚本设置
方式一:此方法比较通用在/etc/init.d目录下找到rc.local文件,在此文件中添加开机要启动脚本的路径例如 设置PATH环境变量直接开机时就设定好了方式二:此方法可区分启动优先级在/etc/init.d目录下可以看到如下文件夹例如进入到rcS.d下可以看到很多脚本的软链接文件以及其特殊的前缀命名。关于优先级具体含义及设置请查看添加链接描述...原创 2021-04-08 17:41:54 · 649 阅读 · 0 评论 -
根文件系统学习笔记(五)
原创 2021-03-03 11:26:08 · 79 阅读 · 0 评论 -
内核启动流程学习笔记(四)
原创 2021-03-03 11:24:14 · 96 阅读 · 0 评论 -
Linux解压tar、gz、zip、rar等文件
1、tar格式(tar是打包,不是压缩):【打包】:tar cvf 目录文件名.tar 目录文件名【解包】:tar xvf 目录文件名.tar2、tar.gz格式:【压缩】:tar -zcvf 目录文件名.tar.gz 目录文件名【解压】:tar -zxvf 目录文件名.tar.gz3、zip格式:【压缩】:zip -r 目录文件名.zip 目录文件名【解压】:unzip 目录文件名.zip4、rar格式:【压缩】:rar a 目录文件名.rar 目录文件名【解压】:unrar x 目原创 2020-12-02 16:05:42 · 189 阅读 · 0 评论 -
PCIe设备枚举
枚举是什么?枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。硬盘是大家都很熟悉的设备,一路走来,从HDD到SSD,从SATA到NVMe,作为NVMe SSD的前端接口,PCIe再次进入我们的视野。作为x86体系关键的一环,PCIe标准历经PCI,PCI-X和PCIe,走过近30年时光。其中Host发现与查找设备的方式却一脉沿袭,今天我们先来聊一聊PCIe设备在一个系统中是如何发现与访问的。首先我们来看一下在x86系统中,PCIe是什么样转载 2020-12-02 15:07:21 · 1451 阅读 · 0 评论 -
linux connect 设置连接超时
原来我们实现connect()超时基本上都使用unix网络编程一书的非阻塞方式(connect_nonb),今天在网上看到一篇文章,觉得很有意思,转载如下:读Linux内核源码的时候偶然发现其connect的超时参数竟然和用SO_SNDTIMO操作的参数一致: timeo = sock_sndtimeo(sk, flags & O_NONBLOCK); if ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_R转载 2020-10-23 16:08:52 · 758 阅读 · 0 评论 -
source与./执行脚本文件的区别
source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"注:该命令通常用命令“.”来替代。如:source .bash_profile. .bash_profile两者等效。source(或点)命令通常用于重新执行刚修改的初始化文档。source命令(从 C Shell 而来)是bash shell的内置命令。点命令,就是个点符号,(从Bourne Shell而来)。./的命令用法:原创 2020-10-19 15:26:31 · 1764 阅读 · 0 评论 -
学习笔记(二)(gcc -i -l、环境变量、编码 字符集、linux文件属性、点阵显示)
GCC总体选项(Overall Option)(1)-c预处理、编译和汇编源文件,但是不作链接,编译器根据源文件生成OBJ文件。缺省情况下,GCC通过用.o'替换源文件名的后缀.c’,.i',.s’等,产生OBJ文件名。可以使用-o选项选择其他名字。GCC忽略-c选项后面任何无法识别的输入文件。(2)-S编译后即停止,不进行汇编。对于每个输入的非汇编语言文件,输出结果是汇编语言文件。缺省情况下,GCC通过用.s'替换源文件名后缀.c’,.i'等等,产生汇编文件名。可以使用-o选项选择其他名字。GCC原创 2020-10-12 09:26:00 · 365 阅读 · 0 评论 -
学习笔记(一)(编译原理、Makefile、网络编程、多线程)
$@目标文件 ; $<依赖文件数据传输三要素:源文件、目的、长度服务端与客户端是主从关系:一般主动的是客户端、被动的是服务器端。写网络小程序,没必要太关注网络7层协议之类的东西。服务端与客户端本质是一种应用程序,可以在同一电脑或者不同电脑运行。一般tcp传的比UDP要慢:UDP:像视频传送过程用udp不可靠连接,只管传送,中间有几帧视频传送失败,会花屏;Tcp:像一些文件传送,需要用到可靠连接,中间丢失文件会造成文件打不开;传送慢的原因是每次传送一次数据都会等...原创 2020-10-09 09:13:52 · 262 阅读 · 0 评论 -
Nginx服务器
正向代理:反向代理:负载均衡:继续占原创 2020-07-24 23:09:05 · 81 阅读 · 0 评论 -
关于多线程与多进程的优劣
进程:一个正在执行的程序,它是资源分配的最小单位进程中的事情需要按照一定的顺序逐个进行,那么如何让一个进程中的一些事情同时执行资源分配 内存多少 CPU多少线程:有时又称轻量级进程,程序执行的最小单位,系统独立调度和分派CPU的基本单位,他是进程中的一个实体。一个进程中可以有多个线程,这些线程共享进程的所有资源,线程本身只包含一点必不可少的资源。CPU相当于转盘 分配给每个线程一定相同的时间 时间到了之后就会转到下个线程单线程:如果事件1 阻塞之后 CPU转一圈下来之后就会只执行事原创 2020-07-24 23:04:51 · 411 阅读 · 0 评论 -
关于线程的一些术语
并发:同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。总结一句:看起来同时发生,单核假设CPU转一圈1ms 因为人的反应时间 看起来每个程序同时执行一样,实际的在1ms内每个应用程序只执行了0.2ms的时间。并行:同一时刻,有多条指令在多个处理器上同时执行。总结一句:真正的同时发生 多核同步:彼此有依赖关系的调用不应该“同时发生”,而同步就是要阻止那些“同时发生”的事情。总结一句:阻止事件同时发生,就是一种机制。Record记录变量的变化原创 2020-07-24 23:01:54 · 224 阅读 · 0 评论 -
线程的概念及属性
线程4个基本状态就绪:运行:阻塞:终止:后续补充详细信息原创 2020-07-24 22:54:21 · 115 阅读 · 0 评论 -
网络编程之TCP协议
应用层 会话层 表示层 由于更关注 通信细节,所以把这三层合并为一层客户端编写通信的框架服务器端编写通信的框架后续补充例程代码:原创 2020-07-24 22:50:27 · 98 阅读 · 0 评论 -
Linux常用命令之Sudo
我们都知道很多的文件都只有root有权限来修改,那么在我们平时的开发过程中都建议使用一般账号来登录进行开发sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令。执行sudo su 命令切换到root权限(注意当执行sudo时,访问的是root权限下的路径,切记路径的添加)退出权限:执行命令 exit或ctrl+d...原创 2020-07-14 12:39:43 · 333 阅读 · 0 评论 -
开发板启动自动设置
关于开发板开机自动启动的设置问题常见的问题如: 每次重启后IP都变了,每次都要重新挂载NFS,手动启动Qt 桌面程序。我有个简单的方法,就是修改开发板的/etc/init.d/rcS这个启动文件。在开发板的终端中输入 : vi /etc/init.d/rcS例如添加命令如下:ifconfig eth0 10.254.1.108 netmask 255.255.255.0 up //设置ipmount -n -o nolock 10.254.1.104:/ho原创 2020-07-14 12:06:01 · 410 阅读 · 0 评论 -
嵌入式Linux烧写原理——MfgTool工具
MfgTool烧写的原理,MfgTool其实是先通过USB OTG先将uboot、kernel和.dtb(设备树)这是三个文件下载到开发板的DDR中,注意不需要下载rootfs。就相当于直接在开发板的DDR上启动Linux系统,等Linux系统启动以后再向EMMC中烧写完整的系统,包括uboot、linuxkernel、.dtb(设备树)和rootfs。因此MfgTool工作过程主要分两个阶段:①、将firmware目录中的uboot、linuxkernel和.dtb(设备树),然后通过USB OTG将原创 2020-07-13 20:52:32 · 951 阅读 · 0 评论 -
NFS(网络文件系统)的应用
nfs(Network File System)网络文件系统,通过 nfs 可以在计算机之间通过网络来分享资源,也就是网络调试,通过网络调试是 Linux 开发中最常用的调试方法。原因是嵌入式 linux开发不像单片机开发,可以直接通过 JLINK 或 STLink 等仿真器将代码直接烧写到单片机内部的 flash 中,嵌入式 Linux 通常是烧写到 EMMC、NAND Flash、SPI Flash 等外置 flash 中,但是嵌入式 Linux 开发也没有 MDK,IAR 这样的 IDE,更没有烧写算原创 2020-07-10 22:54:29 · 313 阅读 · 0 评论 -
添加路径到PATH——在任意地方都可执行
在 Linux 下写完一个脚本,通常情况下我们需要到脚本所在的目录,才可以执行这个脚本。但是大家有没注意到,像 ls 、cd 、pwd 这样的命令,它们的程序是位于 /bin 目录下,但是我们却可以在系统的任意位置都可以执行这些程序。它们是怎么做到的?那是因为这些命令对应的程序所在路径被加到了 Path 环境变量里。所以我们如果把自己的脚本路径加到了这个变量里,我们也可以实现在任意地方执行自己脚本的效果。那么如何添加路径到PATH呢?普通模式:PATH 路径为/etc/profile原创 2020-07-06 16:15:34 · 1377 阅读 · 0 评论 -
Windows格式文本转换成Linux格式
某些情况下,Windows系统下编写的代码文件传到Linux之后常会编译不通过,究其原因乃两操作系统默认的文件编码方式不用。用vim编辑器打开文件,用set:ff命令可查看当前fileformat,若是dos,则应改其为unix命令为:set ff=unix...原创 2020-07-06 12:34:15 · 1489 阅读 · 0 评论 -
字符设备驱动开发简要
Linux 驱动开发中我们需要按照其规定的框架来编写驱动,所以说学 Linux 驱动开发重点是学习其驱动框架。Linux 驱动有两种运行方式:第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启 动的时候就会自动运行驱动程序。第二种就是将驱动编译成模块(Linux 下模块扩展名为.ko),在 Linux 内核启动以后使用“insmod”命令加载驱动模块。在调试驱动的时候一般都选择将其编译 为模块,这样我们修改驱动以后只需要编译一下驱动代码即可,不需要编译整个 Linux 代码。而且在原创 2020-07-06 12:24:42 · 137 阅读 · 0 评论 -
视频监控之V4L2(视频设备内核驱动)
V4L2是Video for linux2的简称,为linux中关于视频设备的内核驱动。在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/video0下。UVC,全称为:USB video class 或 USB video device class,是 Microsoft 与另外几家设备厂商联合推出的为 USB 视频捕获设备定义的协议标准。符合 UVC 规格的硬件设备在不需要安装任何的驱动程序下即可在主机中正常使用。在 Linux 中一切皆为文件,驱动加载成功以原创 2020-07-02 15:00:29 · 826 阅读 · 0 评论 -
视频监控之移植ffmpeg
有两种方法:下载源码,手工编译使用Buildroot,配置选择ffmpeg,直接编译生成映象文件我们使用Buildroot:设置交叉编译工具链在Buildroot根目录make menuconfig如图选择ffmpeg执行make这会在Buildroot的dl/ffmpeg目录下自动下载源码,并编译结果保存在output/images目录下,有rootfs根文件可以直接烧写到板能的EMMC或SD卡上。buildroot 还集成了各种常见的第三方库和软件,需要什么就选择什么,就跟我们去吃原创 2020-07-02 14:55:01 · 436 阅读 · 0 评论 -
进程通信(套接字SOCKET)
网络应用程序由成对的进程组成,在两个不同端系统上的进程,通过跨越计算机网络交换报文(message)。通常将两个进程之一标识为客户(发起通信的进程),另一个标识为服务器(等待联系的进程)。套接字:应用程序编程接口进程之间的报文交换必须通过下面的网络(即传输层)。进程通过一个称为套接字(socket)的软件接口向网络发送报文和从网络接收报文,如下图所示:总结:套接字是应用程序进程和运输层协议之间的接口,通过套接字发送和接受报文(套接字把应用层的内容加到协议栈)...原创 2020-06-22 15:13:02 · 743 阅读 · 0 评论 -
条件变量(四)
条件变量的理念:当线程在等待满足某些条件时使线程进入睡眠状态,一旦条件满足,就唤醒因等待满足特定条件而睡眠的线程。条件变量(条件锁)也可以解决线程同步和共享资源访问的问题,条件变量是对互斥锁的补充,它允许一个线程阻塞并等待另一个线程发送的信号,当收到信号时,阻塞的线程被唤醒并试图锁定与之相关的互斥锁。使用条件变量 pthread_cond_t cond条件变量的初始化与销毁条件变量使用之前需要初始化,有两种方式:1、 Pthread_cond_t cond = PTHREAD_COND_INI原创 2020-06-18 13:50:06 · 342 阅读 · 0 评论 -
读写锁(三)
读写锁表示也有两个锁,一个是读操作相关的锁,也成为共享锁;另一个是写操作相关的锁,也叫排他锁。也就是多个读锁之间不互斥,读锁与写锁之间互斥,写锁与写锁互斥,在没有现成Thread进行写入操作时,进行读取操作的多个Thread都可以获取锁,而进行写入操作的Thread只有在获取写锁后才能进行写入操作,即多个Thread可以同时进行读取操作,但是同一时刻只允许一个Thread进行写入操作。(读写锁具有更高的并行性,互斥量要么加锁要么不加锁,而且同一时刻只允许一个线程对其加锁。读写锁对于同一变量的读取,完全可以原创 2020-06-18 13:47:29 · 201 阅读 · 0 评论 -
互斥量(二)
互斥量从本质来说是一把锁,在访问共享资源前对互斥量进行设置(加锁),在访问完成后释放(解锁)互斥量。对互斥量进行加锁以后,任何其他试图再次对互斥量加锁的线程都会被阻塞,直到当前线程释放该互斥锁。如果解锁前有一个以上的线程阻塞,那么解锁后这些线程就变为运行状态,直到其中一个线程重新对互斥量加锁,这时其他线程又变为阻塞状态。为了让线程访问数据不产生冲突,这就需要对变量进行加锁,使得同一时刻只有一个线程访问变量;当互斥量加锁以后,其他所有需要访问该互斥量的线程都将阻塞;当互斥量解锁以后,所有因为这个互斥量阻原创 2020-06-18 13:45:34 · 158 阅读 · 0 评论 -
线程同步(一)
线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多,临界区对象就是其中一种。临界区:当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。导致竞态条件发生的代码区称作临界区。临界区线程同步适用范围:它只能同步一个进程中的线程,不能跨进程同步。一般用它来做单个进程内的代码快同步,效率比较高。对多线程来说,同步指的是在一定时间内只允许某一个线程访问某个原创 2020-06-18 13:43:32 · 122 阅读 · 0 评论