杂项
文章平均质量分 71
本专栏存放一些不好分类的文章。
caodongwang
热爱学习,热爱生活~~~
展开
-
linux程序运行时间精确计算(转载)
写程序时,程序的运行效率很重要,其往往是评价程序优劣性的直接标准。程序运行效率的最简单方法就是计算程序的运行时间。为了提高程序效率,使用适当的方法对程序的各个部分进行运行时间的计算是很有必要的。在 Linux/Unix 环境下,计算 C 程序运行时间可以通过以下三个函数来实现:clock()、time()、gettimeofday()。clock() 函数clock()函数是 ANSI C 的标准库函数,是 C/C++ 十分常用的计时函数,其声明定义在 time.h 头文件中:clock_t clo转载 2022-01-12 09:31:47 · 6243 阅读 · 0 评论 -
强制打印方法,输出重定向解决
在平常调试程序时候,经常发现标准输出被重定向了,也就是说printf无法打印,以下提供三种方法强制打印。方法一:#include <syslog.h>#include <sys/syslog.h>#include <stdarg.h>#include <stddef.h>#include <stdio.h>#include <unistd.h> static int doser_debug_print_messa原创 2021-10-24 11:28:25 · 1057 阅读 · 0 评论 -
PCA9548/PCA954X配置方法及实现分析
1 基础知识 pca9548芯片系统框图如下图1.1所示:图1.1 如上图所示,通过配置pca9548的寄存器,即可切换开关完成i2c switch。在子总线下设备地址没有冲突的情况下,可以接通多个子总线,如同时接通子总线0和7。 pca9548内核驱动支持自动切换i2c switch,前提是配置好设备树。设备树的配置示例如下图1.2所示:图1.2 通过上图1.2所示配置后,pca9548的内核驱动程序会注册虚拟的i2c总线16-23,这样...原创 2021-10-24 10:52:08 · 10361 阅读 · 14 评论 -
根文件系统(四)——U盘文件系统制作
U盘根文件系统制作方法 首先准备一个稍微大一点的U盘,其次对U盘进行分区,然后将某个区当做根文件系统区,格式化成想要加载的文件系统类型,在将自己制作的rootfs目录下的东西都拷贝到这个区,最后在U盘第一个分区添加linux内核和grub配置文件。(1)分区格式化将U盘插入装有Linux系统的设备,然后使用fdisk命令进行分区:fdisk /dev/sdx输入 p:查询当前分...原创 2021-09-04 15:32:04 · 1134 阅读 · 0 评论 -
根文件系统(三)——initramfs文件系统制作
什么是initramfs文件系统? 在 根文件系统分类 章节中讲述了内核会去挂载一个特殊的rootfs,然后再通过解析"root=xxx"命令行,去挂载 /dev/xxx 真正的根文件系统,那么,我们是否可以直接使用这个rootfs当做最终的根文件系统呢?当然可以,这便是 initramfs 内嵌式文件系统,它是一种ramfs文件系统,既可以当做最终的根文件系统,也可作为临时过渡的文件系统。关于initramfs 的前世今生不在这讲述,这里只讲述如何制作使用它!怎么制作initra...原创 2021-09-04 15:25:40 · 4164 阅读 · 0 评论 -
根文件系统(二)
根文件系统怎么挂接的? 我们常常说内核起来之后会第一个挂接根文件系统,这个根文件系统就是我们制作的吗?其实。。。并不是! 仔细想一想,我们自己制作的根文件系统放在哪???在存储介质上,flash、硬盘、u盘等,那么我们怎么去访问它呢?我们平常读取存储介质中的文件,需要使用文件系统通过挂载点(mount /dev/xxx /mnt)才能获取介质中文件,同样,挂接我们自己做的根文件系统也要这样做,其根因是VFS,我们无法直接去读取介质中文件。 通过上面所述,就...原创 2021-09-04 15:23:01 · 474 阅读 · 0 评论 -
根文件系统(一)
什么是根文件系统? 根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。我们要明白文件系统和内核是完全独立的两个部分。在嵌入式中移植的内核下载到开发板上,是没有办法真正的启动Linux操作系统的,会出现无法加载文件系...原创 2021-09-04 15:17:47 · 2252 阅读 · 0 评论 -
linux字符设备驱动注册
linux字符设备驱动注册会发生什么?字符设备驱动注册字符设备打开使用总体流程原创 2021-05-16 18:05:59 · 298 阅读 · 2 评论 -
linux模块加载
模块加载linux模块加载分两个部分,第一部分在用户态完成,第二部分在内核完成。往下走再往下走总体流程图:模块移除原创 2021-05-16 18:00:41 · 593 阅读 · 0 评论 -
异步通知
什么是异步通知?异步通知类似于硬件上的“中断”,一旦设备就绪,由驱动程序主动通知应用程序,这样应用程序就不需要查询设备状态,而可以去干自己的事。通知采用信号的方式,所以可称为“信号驱动的异步I/O”。为什么使用异步通知?在一个进程中使用I/O多路复用可以同时监控多个I/O设备,但是这里有个问题,如果这些I/O设备都没有准备好的话,那进程就会阻塞休眠,这样就无法去干别的事了,所以就需要一种方法能主动告诉进程,I/O设备资源已经准备好,这种方法就是采用信号机制实现的异步通知(类型于硬件中断的软...原创 2021-05-16 17:20:59 · 655 阅读 · 0 评论 -
阻塞IO与非阻塞IO
什么是I/O?I/O是指input和output,也就是数据的读取(接收)或写入(发送)操作。一个用户进程完成一次I/O操作需要经历两个阶段:用户空间<==>内核空间 内核空间<==>设备缓冲区什么是阻塞I/O和非阻塞I/O?阻塞I/O:进程发起I/O系统调用后,若不能获得资源,则进程会被阻塞挂起,被挂起后将进入休眠状态(放弃CPU),直到资源准备好了,进程才会被唤醒。非阻塞I/O:进程发起I/O系统调用后,若不能立即获得资源,则进程立即返回一个错误(或进程...原创 2021-05-16 17:19:22 · 735 阅读 · 0 评论 -
linux设备号
什么是设备号? linux中设备号是用来标记一类设备以及区分这类设备中具体个体的一组号码,由主设备号和次设备号组成,主设备号用来标记设备的类型,次设备号用来区分在这类设备中具体的个体设备。为什么用设备号? 我们知道"linux下一切皆文件",linux系统将设备抽象成设备文件节点,操作设备就像操作文件一样,而为了唯一识别和管理设备,便使用设备号来标记设备,这样设备文件关联主、次设备号便可关联设备的操作方法(驱动)。 这些设备中,有些设备是对实际存在的...原创 2021-05-16 17:16:36 · 1410 阅读 · 0 评论 -
linux系统调用
什么是系统调用? 用户程序在运行过程中,需要使用到系统的资源,此时,不能由该进程直接去访问,而是通过内核提供的接口来间接访问,转而由内核代替进程去访问底层资源,这些由内核提供的特殊接口就叫系统调用。在linux中,系统调用是用户空间访问内核的唯一手段;它们是内核唯一的合法入口。X86架构下系统调用 X86架构用户调用C库,在C库中通过int 0x80指令触发软中断。在执行INT指令时,实际完成了以下几条操作(保存进程ss、e...原创 2021-05-16 17:11:11 · 191 阅读 · 0 评论 -
硬盘分区
什么是硬盘分区 硬盘分区实质上是对硬盘进行一种特殊的格式化(高级格式化),然后在某个特殊的位置(分区表)标记分区类型、大小、起始和结束位置等,系统去这个特殊的位置上读取硬盘数据就知道硬盘是如何分区的。特殊位置——分区表MBR分区表: 传统的分区方案(称为MBR分区方案)是将分区信息保存到磁盘的第一个扇区(MBR扇区)中的64个字节中,每个分区项占用16个字节,这16个字节中存有活动状态标志、文件系统标识、起止柱面号、磁头号、扇区号、隐含扇区数目(4个字节)...原创 2021-05-16 16:55:38 · 2331 阅读 · 0 评论