------------Linux------------
文章平均质量分 62
zhuyong006
这个作者很懒,什么都没留下…
展开
-
Qemu 启动无法交互的处理方法
【代码】Qemu 启动无法交互的处理方法。原创 2023-10-01 21:09:16 · 464 阅读 · 0 评论 -
利用Qemu调试Linux内核
调试模块需要在 GDB 中使用 add-symbol-file 命令加载符号表信息,add-symbol-file 需要指定模块的 section 信息,以下两种方式都可以获取 section 信息。需要注意的是每次重新加载 ko,section 地址是会变,要 add-symbol-file 重新加载符号表。我是在 VM 中编译之后直接安装的,也可以在 Host 编译把 vmlinux 拷贝至 VM 中安装。获取到.text 地址之后在 gdb 中加载 ko 模块的符号表,然后就可以调试 ko 模块了。转载 2023-07-23 19:44:31 · 671 阅读 · 0 评论 -
怎么通过dd命令分析文件系统
1.通过dd命令创建一个文件,块大小为4096字节,个数为1024dd if=/dev/zero of=image bs=4096 count=10242.格式化为ext4,块大小为4096mkfs.ext4 -b 4096 image3.打印当前块设备的信息root@Jon:/home/jon/test# dumpe2fs imagedumpe2fs 1.42.13 (1...原创 2018-12-10 16:03:23 · 1549 阅读 · 0 评论 -
Linux的软链接和硬链接
1.创建目录a,在里面创建1 2 3三个文件mkdir acd atouch 1 2 32. ln -s a b ln b c3. ls -li a b c4. unlink b会怎样? unlink c会怎样? unlink a会怎样?结论原创 2018-12-05 11:50:35 · 175 阅读 · 0 评论 -
往linux内核函数挂钩子
概述ARM平台下该方案不可行,仅适用于X86本文讲解替换一个已经在内存中的函数,使得执行流流入我们自己的逻辑,然后再调用原始的函数。比如有个函数叫做funcion,而你希望统计一下调用function的次数,最直接的方法就是如果有谁调用function的时候,调到下面这个函数就好了。void new_function(){ count++; return...转载 2018-11-28 18:38:26 · 547 阅读 · 0 评论 -
在工程中最常用的 vim使用技巧
原帖地址:本文记录vim编辑器的代码编辑常用快捷键与在vim中如何进行函数跳转等快捷操作。可以查看右侧目录快速找到你所需要的内容。主要学习以下内容:.vimrc配置文件cscope-indexer 文件索引组件使用上述两个组件更加快捷的编辑代码1、vim编辑常用快捷键当我们使用vim打开一个文件的时候,刚进到文件,是处于命令行模式(就是无法编辑代码)。当按下键盘上的 i 或者 ...转载 2018-11-28 15:39:05 · 196 阅读 · 0 评论 -
内核如何检测soft lockup与hard lockup?
原帖地址:所谓lockup,是指某段内核代码占着CPU不放。Lockup严重的情况下会导致整个系统失去响应。Lockup有几个特点:首先只有内核代码才能引起lockup,因为用户代码是可以被抢占的,不可能形成lockup(只有一种情况例外,就是SCHED_FIFO优先级为99的实时进程即使在用户态也可能使[watchdog/x]内核线程抢不到CPU而形成soft lock,参见《Real-T...转载 2018-11-30 18:54:43 · 1044 阅读 · 0 评论 -
linux下实现在程序运行时的函数替换(热补丁)
原帖地址:声明:以下的代码成果,是参考了网上的injso技术,在本文的最后会给出地址,同时非常感谢injso技术原作者的分享。 但是injso文章中的代码存在一些问题,所以后面出现的代码是经过作者修改和检测的。也正因为这些错误,加深了我的学习深度。  最近因为在学习一些调试的技术,但是很少有提到如何在函数运行时实现函数替换的。 为什么会想到这一点?因为在学习调试时,难免...转载 2018-11-30 10:26:34 · 1152 阅读 · 0 评论 -
vmalloc与mmap
mmap()系统调用是在用户进程与内核之间共享内存区域的常用方法。我们最近有个程序,需要应用进程能够读取内核驱动获取的数据,经过简单的调研,决定采用mmap方式。实现起来不难,在驱动中注册一个字符设备,实现该设备的mmap()方法即可。但这其中有一点小曲折。在实现设备的mmap()方法时,需要将物理内存映射到应用程序通过mmap()系统调用传下来的vma中。vma代表的是进程的一段虚拟地址空间。...转载 2018-11-19 15:10:52 · 220 阅读 · 0 评论 -
宋宝华: CPU是如何访问到内存的?--MMU最基本原理
原帖地址:假设页表只有一级对于一个有MMU的CPU而言,MMU开启后,CPU是这样寻址的:CPU任何时候,一切时候,发出的地址都是虚拟地址,这个虚拟地址发给MMU后,MMU通过页表来在页表里面查出来这个虚拟地址对应的物理地址是什么,从而去访问外面的内存条。MMU里面的页表地址寄存器,记录了页表本身的存放位置。 现在我们假设每一页的大小是4KB,而且假设页表只有一级,这个页表长成下面这个样子...转载 2018-11-02 13:52:20 · 418 阅读 · 0 评论 -
谈谈Linux的栈回溯与妙用
原标题:谈谈Linux的栈回溯与妙用 作者简介:冬之焱,杭州某公司linux内核工程师,4年开发经验,对运用linux内核的某些原理解决实际问题很感兴趣。 版权声明:本文最先发表于"Linux阅码场"微信公众号,转载请在文章的最开头,保留本声明。 1 前言 说起linux内核的栈回溯功能,我想这对每个Linux内核或驱动开发人员来说,太常见了。如下演示...转载 2018-11-02 10:26:46 · 3573 阅读 · 0 评论 -
Linux线程间死锁分析
死锁 (deadlocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程(线程)在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。...转载 2018-11-06 15:47:10 · 1410 阅读 · 0 评论 -
SimpleFs文件系统初步五(文件的读写)
1.写数据的过程:ssize_t simplefs_write(struct file * filp, const char __user * buf, size_t len, loff_t * ppos){ /* After the commit dd37978c5 in the upstream linux kernel, * we can use just fil...原创 2018-11-01 17:23:39 · 499 阅读 · 0 评论 -
linux-inject:注入代码到运行的Linux进程中
1.下载代码git clone https://github.com/gaffe23/linux-inject.gitcd linux-injectmake2.开启2个终端,其中一个终端执行cd ~/workspace/linux-inject,运行./sample-target另外一个终端执行sudo ./inject -n sample-target sample-libra...转载 2018-12-05 18:43:44 · 2667 阅读 · 0 评论 -
Android网卡(Wifi/Lan)带宽测试
获取Android端的iperf工具获取地址:ubuntu下安装iperf,命令:apt-get install iperf务必首先保证android设备和ubuntu主机可以互相ping通,这是进行测试的前提ubuntu主机执行如下命令进入服务端模式(我这儿服务端ip:172.16.0.152)iperf -sAndroid端设备作为客户端模式执行如下指令和ubu...原创 2018-12-07 10:33:55 · 3609 阅读 · 0 评论 -
Linux内核如何启动并装载一个可执行程序
一、理解编译链接的过程和ELF可执行文件格式 我给出了一个例子:第一步:先编辑一个hello.c,如下vi hello.c1 #include <stdio.h>2 #include <stdlib.h>3 4 int main()5 {6 printf("Hello World!\...转载 2018-12-07 11:17:10 · 822 阅读 · 0 评论 -
Linux 如何限制用户的磁盘使用量 -- quota
1. 查看所有磁盘的容量及使用情况: 可以看到本机有三块磁盘(sda/sdb/sdc),每块磁盘的大小约1T,其中系统被安装到了sda上,另两块磁盘被挂载到了/home/mnt1 和/home/mnt2上。由于使用服务器的人只有十来个,因此可以先将用户的home目录建在这两块磁盘上,以后用户增多再建在sda上。 了解了磁盘情况,我们为每个用户设置磁盘的使用量为100G。...转载 2019-07-06 13:54:58 · 5775 阅读 · 0 评论 -
Linux执行可执行文件提示No such file or directory的解决方法
最近在使用Linux操作系统执行一个可执行文件,结果出现了No such file or directory的提示,表示很疑惑。./tshrfbash: ./tshref: No such file or directory查看文件信息,可以看到文件是存在的,并且是可以执行的。-rwxr-xr-x 1 yuan yuan 20581 4月 29 2004 tshref查阅资料后,...原创 2019-07-08 21:30:33 · 8137 阅读 · 0 评论 -
Ubuntu下怎么通过命令完成蓝牙的配对和连接
1.输入hciconfig命令,确认你的蓝牙设备是否被系统识别,避免你插入多个蓝牙设备2.为你的蓝牙设备上电,输入hciconfig hci0 up3.输入bluetoothctl命令4.启动搜索模式,输入scan on5.当找到你需要连接的蓝牙设备时,输入scan off,停止探索6.完成配对输入pair 蓝牙地址(你需要连接的设备)7.手机端需要确认配对请求,之后ubu...原创 2019-05-07 18:09:45 · 20665 阅读 · 10 评论 -
编译LTIB遇到的问题解决办法
错误1:compr_lzo.c:31:23: fatal error: lzo/lzo1x.h: No such file or directory错误2:In file included from mkfs.ubifs/mkfs.ubifs.c:25:0:mkfs.ubifs/mkfs.ubifs.h:48:23: fatal error: uuid/uuid.h: No such fi...转载 2019-04-12 19:44:01 · 285 阅读 · 0 评论 -
mtd_utils交叉编译
1.材料准备1. zlib-1.2.3.tar.gz:http://download.chinaunix.net/download.php?id=40893&ResourceID=122412. lzo-2.10.tar.gz:http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz3. ...原创 2019-04-12 19:42:33 · 924 阅读 · 0 评论 -
为什么手工drop_caches之后cache值并未减少?
在Linux系统上查看内存使用状况最常用的命令是"free",其中buffers和cache通常被认为是可以回收的:$ free total used free shared buffers cachedMem: 32764716 1067548 31697168 158332 12 ...转载 2019-04-07 23:26:48 · 615 阅读 · 0 评论 -
文件系统和裸块设备的page cache问题
原帖出处:普通文件的address space文件系统读取文件一般会使用do_generic_file_read(),mapping指向普通文件的address space。如果一个文件的某一块不在page cache中,在find_get_page函数中会创建一个page,并将这个page根据index插入到这个普通文件的address space中。这也是我们熟知的过程。static s...转载 2019-03-19 18:23:13 · 236 阅读 · 0 评论 -
Ubuntu解决包依赖关系
问题:apt-get install libprotobuf-dev下列软件包有未满足的依赖关系: libprotobuf-dev : 依赖: zlib1g-dev 但是它将不会被安装E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。原因:Linux下经常需要安装不同类型的库,在Ubuntu中,这些类库都是以“lib_name-versi...转载 2018-12-26 11:00:52 · 432 阅读 · 0 评论 -
SimpleFs文件系统初步四(Inode的创建过程)
我们在文件系统下面创建一个文件或者目录,毫无疑问,文件系统必须先去检查这个文件或者文件夹是否存在吧,随后如果文件系统检查到文件或者文件夹不存在才会为你新建,否则返回出错。1.文件或者文件夹的检查过程struct dentry *simplefs_lookup(struct inode *parent_inode, struct dentry *child_dentry, u...原创 2018-11-01 11:25:38 · 814 阅读 · 0 评论 -
Ubuntu 16.04显示分辨率的更改
今天在公司的老电脑上安装了Ubuntu 14.04 32位版,主板是铭瑄的G41,显示器是飞利浦的21.5寸液晶(飞利浦的226V4LSB/93),这个配置和我家里的差不多,我家里的电脑也是G41的主板,显示器是三星的19寸液晶。可是相同的安装光盘,怎么安装了之后,我家里的电脑可以显示宽屏的分辨率,而公司的电脑则只有两个正屏的4:3的分辨率,请问得怎么调宽屏的分辨率出来呢?公司整套主机的配置如下...转载 2018-10-22 15:55:56 · 1595 阅读 · 0 评论 -
Linux Kernel中irq handler, softirq handler 和 tasklet
Linux Kernel中irq handler, softirq handler 和 tasklet 是比较容易混淆的概念,下面整理一下。Irq handler通常被称为中断执行的TOP Half,softirq和tasklet被称为bottom half。它们的执行次序可见下图:某硬件interrupt line触发irq—>(interrupt line disabled)—-...转载 2018-07-23 17:00:23 · 1878 阅读 · 0 评论 -
Deadline调度器之(二):细节和使用方法
一、前言 Linux内核的DL调度器是一个全局EDF调度器,它主要针对有deadline限制的sporadic任务。注意:这些术语已经在本系列文章的第一部分中说明了,这里不再赘述。在这本文中,我们将一起来看看Linux DL调度器的细节以及如何使用它。另外,本文对应的英文原文是https://lwn.net/Articles/743946/,感谢lwn和Daniel Br...转载 2018-07-12 09:48:50 · 2374 阅读 · 1 评论 -
Linux Interrupt——魅族内核大神文章
在面试的时候我们常常被问及一个问题:几种中断下半部机制 softirq、tasklet、workqueue 有什么区别?Linux 为什么要设计这几种机制?真正能够回答清楚的人还是少数的。下面我们就详细分析一下这其中的区别。本文的代码分析基于 Linux kernel 3.18.22 和 arm64 架构,最好的学习方法还是 “RTFSC”1. Linux 中断arm64 和其他所有 C...转载 2018-07-23 16:27:38 · 373 阅读 · 0 评论 -
linux下类似Bus Hound的工具
linux下类似Bus Hound的工具0推荐在linux大家有时候需要调试usb接口的串口消息,但是没有类似于windows下的bus hound工具,感觉比较痛苦,其实linux内核提供了usbmon这个工具,可以收集串口信息。1.准备:挂接debugfs (这个可以在内核配置中使能),加载usbmon模块(如果usbmon编译成模块). 如果usbmon编译到内核中的话,第二步可以省...转载 2018-07-11 21:20:40 · 2211 阅读 · 0 评论 -
内存管理 —— ION
ION 是当前 Android 流行的内存分配管理机制,在多媒体部分中使用的最多,例如从 Camera 到 Display,从 Mediaserver 到 Surfaceflinger,都会利用 ION 进行内存分配管理。 ION 的前任是 PMEM,关于 PMEM 我在 M030/M04X 项目中有接触过,后来由于 PMEM 的一些局限性,Google 推出了 ION 来取代 PMEM,当前 I...转载 2018-07-23 14:01:34 · 22787 阅读 · 0 评论 -
Linux下gdb调试(GUI)
Linux下gdb调试(tui) 1 处于TUI模式的GDB为了以TUI模式运行GDB,可以在调用GDB时在命令行上指定-tui选项,或者处于非TUI模式时在GDB中使用Ctrl+X+A组合键。如果当前处于TUI模式,后一种命令方式就会使你离开TUI模式。在TUI模式中,GDB窗口划分为两个子窗口——一个用于输入GD...转载 2018-07-17 09:07:21 · 3273 阅读 · 0 评论 -
deadline调度器之(一):原理
原帖地址: deadline调度器之(一):原理一、概述 实时系统是这样的一种计算系统:当事件发生后,它必须在确定的时间范围内做出响应。在实时系统中,产生正确的结果不仅依赖于系统正确的逻辑动作,而且依赖于逻辑动作的时序。换句话说,当系统收到某个请求,会做出相应的动作以响应该请求,想要保证正确地响应该请求,一方面逻辑结果要正确,更重...转载 2018-07-10 09:25:14 · 2348 阅读 · 0 评论 -
邵国际: C 语言对象化设计实例 —— 命令解析器
原贴地址:https://mp.weixin.qq.com/s/cuy0PEVRR4f4h_RCiQeTdQ前言传统单片机 MCU 编程大多使用过程式的思维来组织程序,在单片机资源少、功能简单、代码规模小的情况下,「想到啥写啥」的方法也确实能解决大部分问题。但随着硬件的快速升级,如今的大部分嵌入式工程师已经不再需要「掐着内存」来写代码了。当软件的规模越发庞大、复杂,这时如何编写可复转载 2018-01-29 10:02:24 · 1055 阅读 · 0 评论 -
中断唤醒系统流程
1. 前言 曾几何时,不知道你是否想过外部中断是如何产生的呢?又是如何唤醒系统的呢?在项目中,一般具有中断唤醒的设备会有一个interrupt pin硬件连接到SoC的gpio pin。一般来说,当设备需要唤醒系统的时候,会通过改变interrupt pin电平状态,而SoC会检测到这个变化,将SoC从睡眠中唤醒,该设备通过相关的子系统通知上层应用做出相应的处理。这就是中断唤醒的过程...转载 2018-07-12 14:05:28 · 3591 阅读 · 1 评论 -
Linux Regmap分析
举例说明: - devm_regmap_init_mmio_clk - regmap_update_bits(dsi->regmap, DSI_PHY_TST_CTRL1, PHY_TESTEN, 0); - regmap_read(dsi->regmap, DSI_PHY_TST_CTRL1, &data); - regmap_write(dsi->re...原创 2018-07-05 18:30:46 · 6478 阅读 · 1 评论 -
Linux下设置定期执行脚本
下面针对的是非ubuntu环境,会在文章末尾介绍ubuntu的一些区别。 在Linux下,经常需要定期的执行一些脚本从而来实现一些功能。 在Linux下我们用crontab来实现定期的执行脚本这个功能,下面就介绍一下crontab的使用。以及我遇到的一些问题一. crontab的使用说明 1. crond 是linux用来定期执行程序的命令。当安装完成操作系统之...转载 2018-07-20 18:40:09 · 561 阅读 · 0 评论 -
SimpleFs文件系统初步三(Mount过程分析)
static int simplefs_init(void){ int ret; sfs_inode_cachep = kmem_cache_create(&amp;amp;quot;sfs_inode_cache&amp;amp;quot;, sizeof(struct simplefs_inode), ...原创 2018-10-19 16:46:45 · 1085 阅读 · 0 评论 -
SimpleFs文件系统初步一(编译并挂载)
编译并挂载simplefs文件系统相关的代码链接如下io:simplefs1.首先使用dd命令创建一个文件&quot;image&quot;dd if=/dev/zero of=image bs=1M count=1000在当前目录下会生成一个1000M的image文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为0源),但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果...原创 2018-10-19 16:34:35 · 740 阅读 · 0 评论 -
SimpleFs文件系统初步二(测试用的块设备构建)
1.首先打开我们通过dd命令生成的image文件fd = open(argv[1], O_RDWR);2.写超级块write_superblock(fd)我们详细看看超级块是怎么去写的static int write_superblock(int fd){ struct simplefs_super_block sb = { .version = 1, .magic ...原创 2018-10-19 16:38:11 · 486 阅读 · 0 评论