学习之路
文章平均质量分 94
芋圆-钰源
我只想好好学习....
展开
-
ubuntu安装adb
1、通过apt-get安装adbsudo add-apt-repository ppa:nilarimogard/webupd8sudo apt-get updatesudo apt-get install android-tools-adb将android设备连接至电脑,执行adbshell会提示“error:device not found”2、将android设备连接至电脑,通过l...转载 2019-11-01 17:53:47 · 554 阅读 · 0 评论 -
getopt函数解析
平时在写程序时常常需要对命令行参数进行处理,因为参数少,自己解析就可以搞定;如果命令行个数比较多时,如果按照顺序一个一个定义参数含义很容易造成混乱,而且如果程序只按顺序处理参数的话,一些“可选参数”的功能将很难实现,这个问题在 linux 中用 getopt 等函数可以优雅地解决。一、查询linux命令手册:复制代码#include<unistd.h>#include<...转载 2019-10-25 14:36:04 · 644 阅读 · 0 评论 -
shell中如何取括号中的字符
1. 使用grep(结果带括号,不知道有没有办法仅把括号中的内容匹配出来)1234567$a='abc[edg]adfirpqu'$echo $a|grep -o '\[.*\]' #中括号的处理需要转义[edg] $b='abc(edg)adfirpqu'转载 2017-09-22 17:11:58 · 12914 阅读 · 0 评论 -
wordpress快速搭站
http://blog.sina.com.cn/s/blog_6e3638010101gss5.html遇到的问题:1.安装PHP时报错:dpkg:错误:文件 /usr/lib/gio/modules 和软件包 libglib2.0-0:amd64 有重复的文件触发关注解决思路:http://henlin3344.blog.163.com/blog/static/11142411620转载 2017-09-02 14:14:17 · 256 阅读 · 0 评论 -
Linux动态频率调节系统CPUFreq之三:governor
在上一篇文章中,介绍了cpufreq的core层,core提供了cpufreq系统的初始化,公共数据结构的建立以及对cpufreq中其它子部件提供注册功能。core的最核心功能是对policy的管理,一个policy通过cpufreq_policy结构中的governor字段,和某个governor相关联,本章的内容正是要对governor进行讨论。通过前面两篇文章的介绍,我们知道,gov转载 2017-09-27 14:38:36 · 2913 阅读 · 0 评论 -
Linux动态频率调节系统CPUFreq之二:核心(core)架构与API
上一节中,我们大致地讲解了一下CPUFreq在用户空间的sysfs接口和它的几个重要的数据结构,同时也提到,CPUFreq子系统把一些公共的代码逻辑组织在一起,构成了CPUFreq的核心部分,这些公共逻辑向CPUFreq和其它内核模块提供了必要的API,像cpufreq_governor、cpufreq_driver等模块通过这些API来完成一个完整的CPUFreq体系。这一节我们就来讨论一下核心转载 2017-09-27 14:37:46 · 684 阅读 · 0 评论 -
Linux动态频率调节系统CPUFreq之一:概述
随着技术的发展,我们对CPU的处理能力提出了越来越高的需求,芯片厂家也对制造工艺不断地提升。现在的主流PC处理器的主频已经在3GHz左右,就算是智能手机的处理器也已经可以工作在1.5GHz以上,可是我们并不是时时刻刻都需要让CPU工作在最高的主频上,尤其是移动设备和笔记本电脑,大部分时间里,CPU其实工作在轻负载状态下,我们知道:主频越高,功耗也越高。为了节省CPU的功耗和减少发热,我们有必要根据转载 2017-09-27 14:36:36 · 603 阅读 · 0 评论 -
内核抢占
1. 基本概念用户抢占和内核抢占 用户抢占发生点 当从系统调用或者中断上下文返回用户态的时候,会检查need_resched标志,如果被设置则会重新选择用户态task执行内核抢占发生点 当从中断上下文返回内核态的时候,检查need_resched标识以及__preemp_count计数,如果标识被设置,并且可抢占,则会触发调度程序preempt_schedule转载 2017-09-01 14:48:06 · 376 阅读 · 0 评论 -
Linux系统内核启动代码分析
一、vmlinux、zImage与uImage之间的关系vmlinux是编译出来的最原始的内核文件,未压缩;zImage是经过gzip压缩后的文件;uImage是u-boot专用的映像文件,它是在zImage之前加上一个长度为64字节的tag。注:影响系统启动速度的关键因素分析看到这,我本想不压缩以提升启动速度,但是实验发现,影响系统启动速度的关键因素还转载 2017-09-01 11:10:07 · 531 阅读 · 0 评论 -
rcu的理解
RCU(Read-copy update)是于2012年10月引入内核的同步机制,是读写锁的一种.RCU的updater(写者)会先复制一份指针指向的数据进行修改,然后修改指针指向修改后的数据,然后就等啊等啊等.为啥要等啊?因为原先指针指向的数据上可能有读者(reader),reader自然不会负责回收这个数据所占的空间.如果updater立即回收,乃干的偷天换日的勾当就暴露了.转载 2017-09-21 16:43:23 · 6236 阅读 · 0 评论 -
Linux内核同步机制之(一):原子操作
一、源由我们的程序逻辑经常遇到这样的操作序列:1、读一个位于memory中的变量的值到寄存器中2、修改该变量的值(也就是修改寄存器中的值)3、将寄存器中的数值写回memory中的变量值如果这个操作序列是串行化的操作(在一个thread中串行执行),那么一切OK,然而,世界总是不能如你所愿。在多CPU体系结构中,运行在两个CPU上的两个内核控制路径同时并行执行上面操作序列,有可能转载 2017-09-21 17:06:39 · 2381 阅读 · 0 评论 -
ubuntu提示符修改
使用命令行的时候有时候输出较多的话,找上一条输入的命令都不好找,每条命令之前的分割线不是很明显,好在可以通过修改家目录的~/.bashrc文件中的PS1的值来达到修改Bash命令行提示符的颜色的目的,通过修改PS1还可以修改提示的工作目录的长度。$ vim ~/.bashrc在最后一行添加如下的代码:PS1=’[\033[0;32m]<\u@\h \W>$[\033[0m]’e...转载 2019-04-09 17:38:02 · 832 阅读 · 0 评论 -
linux平台从源码安装git及指定系统使用的git版本
如果是ubuntu等能自动安装软件的系统,就甭听我废话了,ubuntu安装软件实在是太方便了。当下最流行的版本管理工具莫过于git了,他的流行不仅是源于他的历史,还源于他的方便及强大的功能,本人曾经用过vss、cvs、cc、svn,自从接触git后,发现git真的是太方便,太强大了,不过由于我的linux 发布的比较早,一直懒得装新版本的linux,于是就想把git升级一下,结果并没有想象中那么顺...转载 2018-04-04 14:01:42 · 472 阅读 · 0 评论 -
在全志平台调试博通的wifi驱动
http://blog.csdn.net/fenzhi1988/article/details/44809779?winzoom=1转载 2018-03-02 16:32:30 · 1381 阅读 · 0 评论 -
thermal温控模块
http://www.cnblogs.com/arnoldlu/p/6388151.html转载 2018-02-09 18:30:53 · 1701 阅读 · 0 评论 -
ftrace简介
https://www.ibm.com/developerworks/cn/linux/l-cn-ftrace/index.html转载 2018-02-09 18:25:34 · 195 阅读 · 0 评论 -
module_init机制的理解
我们在学习Linux驱动开发时,首先需要了解Linux的模块化机制(module),但是module并不仅仅用于支撑驱动的加载和卸载。一个最简单的模块例子如下:// filename: HelloWorld.c#include #include static int hello_init(void){ printk(KERN_ALERT "Hello World\n");转载 2017-11-29 14:43:49 · 14608 阅读 · 1 评论 -
根文件系统及Busybox简介
1.根文件系统简介所谓制作根文件系统,就是创建各种目录,并且在目录里创建相应的文件。例如:在/bin目录下放置可执行程序,在/lib下放置各种库等等。2.Busybox简介2.1Busybox简介Busybox是一个开源项目,遵循GPL v2协议。Busybox将众多的UNIX命令集合进一个很小的可执行程序中,可以用来替代GNU fileutils、shelluti转载 2017-11-06 15:40:19 · 324 阅读 · 0 评论 -
initcall机制
Linux系统启动过程很复杂,因为它既需要支持模块静态加载机制也要支持动态加载机制。模块动态加载机制给系统提供了极大的灵活性,驱动程序既可支持静态编译进内核,也可以支持动态加载机制。Linux系统中对设备和子系统的初始化在最后进行,主要过程可以用下图表示。图1进入子系统初始化时,在内核init进程中进行设备初始化,最为复杂、诡异的机制莫过于do_转载 2017-09-26 14:32:24 · 1180 阅读 · 0 评论 -
vim 配置
一条命令搞定配置:wget -qO- https://raw.github.com/ma6174/vim/master/setup.sh | sh -x效果图:常用技巧:1.按F5可以直接编译并执行C、C++、java代码以及执行shell脚本,按“F8”可进行C、C++代码的调试2.自动插入文件头 ,新建C、C++源文件时自动插入表头:包括文件名、作者转载 2017-08-05 11:18:34 · 192 阅读 · 0 评论 -
BUG_ON()和WARN_ON()的用法
一些内核调用可以用来方便标记bug,提供断言并输出信息。最常用的两个是BUG()和BUG_ON()。当被调用的时候,它们会引发oops,导致栈的回溯和错误信息的打印。为什么这些声明会导致 oops跟硬件的体系结构是相关的。大部分体系结构把BUG()和BUG_ON()定义成某种非法操作,这样自然会产生需要的oops。你可以把这些调用当作断言使用,想要断言某种情况不该发生 :if (bad_thi转载 2017-09-05 20:27:22 · 3483 阅读 · 0 评论 -
linux内核的nohz与hres
设计linux内核的那帮家伙想的可真周到啊,前面说过,linux内核的性格就是激情,只要硬件设计的足够灵活,那么设计者就会尽可能的发挥,不放过任 何可自由发挥的点和死角,而且他们从来不管后果,有时还毅然抛弃硬件的建议,最新内核的nohz可谓是一项创举。时钟中断是计算机系统必须的,就像人必须 有心跳一样,人的心跳是周期的,计算机系统的“心跳”也是周期的,因此,时钟中断每隔固定的时间就会发生。 真转载 2017-09-13 14:42:41 · 2103 阅读 · 0 评论 -
内存屏障
友情链接:http://blog.csdn.net/u010781856/article/details/43085209http://blog.csdn.net/cnctloveyu/article/details/5486339当你看到“内存屏障”四个字的时候,你的第一反应是什么?寄存器里取出了错误的值?ifence,sfence之类的指令?还是诸如volatile转载 2017-09-13 11:49:27 · 136 阅读 · 0 评论 -
段错误
一、什么是段错误?一旦一个程序发生了越界访问,cpu 就会产生相应的保护,于是 segmentation fault 就出现了,通过上面的解释,段错误应该就是访问了不可访问的内存,这个内存区要么是不存在的,要么是受到系统保护的,还有可能是缺少文件或者文件损坏。二、段错误产生的原因下面是一些典型的段错误的原因:非关联化空指针——这是特殊情况由内存管理硬件试图访转载 2017-08-15 14:11:01 · 8812 阅读 · 0 评论 -
linux下putty的配色方案
sudo putty进入后更改参数Default Foreground: 255/255/255 * Default Background: 51/51/51 * ANSI Black: 77/77/77 * ANSI Green: 152/251/152 * ANSI Yellow: 240/230/140 * ANSI Blue: 205/133/63转载 2017-08-07 10:05:29 · 630 阅读 · 0 评论 -
添加自己的package
添加自行开发的软件包1.在package目录下创建一个目录eg:mkdir hello2.在hello文件夹下建立src文件夹3.在src中添加源文件eg:vim hello.c#include int main(void){printf("\n\nhello world !\n\n");return 0;}4.在转载 2017-08-14 11:18:55 · 2459 阅读 · 1 评论 -
oom原理分析
OOM原理分析12/30. 2013OOM全称是Out Of Memory,指的是kernel因分配不出内存而报的错误,同时会触发kernel调用OOM killer杀进程来解除这种状况。OOM发生的条件一般有两个:1. VM里面分配不出更多的page(注意linux kernel是延迟分配page策略,及用到的时候才alloc;所以malloc + mem转载 2017-08-14 10:38:35 · 1585 阅读 · 1 评论 -
Tina编译常见问题(openssl,libssl依赖)
=====================(从文章中间开始为正确安装的解决方案)======(1)# xz -d Python-2.7.11.tar.xz# tar xvf Python-2.7.11.tar# cd Python-2.7.11/# ./configure # make && make install(2):~$ sudo apt-get转载 2017-08-08 09:20:15 · 1087 阅读 · 0 评论 -
Linux内核跟踪之trace框架分析
一: 前言本文主要是对trace的框架做详尽的分析, 在后续的分析中,再来分析接入到框架中的几个重要的tracer. 在下面的分析中,会涉及到ring buffer的操作,如果对这部份不熟悉的,请先参阅本站有关ring buffer分析的文章. 同以往的分析一样,本文不会在trace的使用上花费较多的笔墨,而着重分析kernel中源代码实现, 有关这部份的使用,请参阅kernel自带的文档转载 2017-09-13 20:35:11 · 3487 阅读 · 0 评论 -
kernel中的per_cpu变量
per-cpu 变量的引入有效的解决了SMP系统中处理器对锁得竞争,每个cpu只需访问自己的本地变量。本文阐述了per-cpu变量在2.6内核上的实现和相关操作。在系统编译阶段我们就手工的定义了一份所有的per-cpu变量,这些变量的定义是通过宏DEFINE_PER_CPU实现的:11 #define DEFINE_PER_CPU(type, name) \转载 2017-09-13 20:37:20 · 1237 阅读 · 0 评论 -
ubus
http://gofly.blog.51cto.com/4344767/1685199/ubus是为了OpenWrt中守护进程和应用程序之间通讯开发的,类似桌面的DBus,设计理念上与DBus基本保持一致,区别是简化的API和简练的模型,以适应embeddedrouter的特殊环境。与DBus一样也是使用socket实现。核心部分是ubusd守护进程,它提供了其他守护进程将自己转载 2017-09-14 13:40:39 · 1669 阅读 · 0 评论 -
echo timer > /sys/class/leds/*/trigger
最简单的Application Framework之灯光系统解析1123[定时器]: Linux LED Class : Linux已经对灯光系统的大部分功能都封装好了函数。 : Linux x.xx.x/drivers/leds2 1<. 情景分析 leds_init class_create : 创建一个cl转载 2017-09-26 10:57:44 · 5672 阅读 · 0 评论 -
linux系统监控工具
随着互联网行业的不断发展,各种监控工具多得不可胜数。这里列出网上最全的监控工具。让你可以拥有超过80种方式来管理你的机器。在本文中,我们主要包括以下方面:命令行工具网络相关内容系统相关的监控工具日志监控工具基础设施监控工具监控和调试性能问题是一个艰巨的任务,但用对了正确的工具有时也是很容易的。下面是一些你可能听说过的工具,也有可能没有听说过—转载 2017-09-26 10:19:38 · 503 阅读 · 0 评论 -
dpkg:警告:无法找到软件包 XXXX 问题解决
先来讲讲 这个问题是咋出来的一.由于前段时间想安装一个vsftpd+ldap在服务器上,google了各种安装配置方法,没装成功!因为多次尝试,使用了各种apt-get install +apt-get remove ,结果就导致出现了 一些“pkg:警告:无法找到软件包 XXXX ” 问题当时,警告还是很少的 也就是提示无法找到的包不多,渐渐地,服务器装的东西多了,这个转载 2017-09-08 17:27:16 · 663 阅读 · 0 评论 -
CPU模式
【hotplug】热拔插模式:快升逐级降→和ondemand模式差不多,当有高需求时直接跳到最高频率,当需求见效时逐级降低频率,但关屏时就单核低频运行,省电。【ondemand】按需模式:快升快降→按需调节cpu频率,不操作手机的时候控制在最低频率,滑屏或进入应用后会迅速提升至最高频率,当空闲时迅速降低频率,性能较稳定,但因频率变化幅度过大,省电方面只有一般的水平。是一转载 2017-09-08 15:37:28 · 393 阅读 · 0 评论 -
__attribute__ 机制详解
GNU C 的一大特色就是__attribute__ 机制。__attribute__ 可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。其位置约束为: 放于声明的尾部“;” 之前__attribute__ 书写特征为: __attribute__ 前后都有两个下划线,并切后转载 2017-08-30 19:56:46 · 188 阅读 · 0 评论 -
linux内核中的__read_mostly变量
在阅读socket源码的时候,有如下一句(net/socket.c):[plain] view plain copystatic struct vfsmount *sock_mnt __read_mostly; 感觉__read_mostly很奇怪,就深入分析了一下。__read_mostly原语将定义为转载 2017-08-30 19:51:56 · 332 阅读 · 0 评论 -
__asm__ __volatile__内存屏障
__asm__ __volatile__("": ::"memory")内存屏障(memory barrier) #define set_mb(var, value) do { var = value;mb(); } while (0) #define mb() __asm__ __volatile__ ("" : : :"memory")1)set_mb(),mb()转载 2017-09-07 17:01:40 · 658 阅读 · 0 评论 -
need_resched 是怎么使用的(ZT)
need_sched 表示CPU从系统空间返回到用户空间前夕要进行一次调度。一 系统调用do_fork() 1 当前进程调用fork()创建子进程,进入kernel 2 当前进程分一半多时间片给子进程, 3 如果当前进程时间片剩余为0,设定当前进程need_sched=1, 4 从系统调用退出 5 到达ret_from_sys_call 6 到达ret_wi转载 2017-09-07 14:20:06 · 492 阅读 · 0 评论 -
lsusb
什么是lsusb在它的手册上,lsusb定义成:显示系统中以及连接到系统的USB总线信息的工具。如何运行lsusb? 要运行lsusb,你可以直接在控制台输入lsusb。$ lsusbBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 002 Device 001: ID 1d转载 2017-09-14 13:42:07 · 1002 阅读 · 0 评论