linux
TangGeeA
这个作者很懒,什么都没留下…
展开
-
内存屏障(不错文章)
https://blog.csdn.net/qb_2008/article/details/6840593原创 2021-10-03 20:25:20 · 186 阅读 · 0 评论 -
Linux下为什么有platform总线
首先你要知道总线是干什么的? 这里就不粘贴各种百科中的定义了。 说一下我的理解吧1 总线用于设备间传输数据,为数据传输提供载体和协议。2 总线用于给新设备提供接口。传输数据很好理解,那么怎么提供接口呢,这就要提到总线的控制器,总线控制器具有发现设备插拔的能力。比如usb总线上你插入一个设备,usb设备控制器就会发现设备插入,触发中断。另外开机的时候还可以通过扫描usb总线来发现设备。同样pci总线也具有这样的能力。但是在soc上,有些总线是没有发现设备的能力的,另外还有一些纯软件的驱动,它不和任何原创 2020-06-20 18:02:09 · 343 阅读 · 0 评论 -
android 链接器分析
我们已经知道,exec系统调用后,操作系统解析完成elf文件后,将控制权交给链接器的_start执行,下面以x86平台进行分析bionic/linker/arch/x86/begin.c__LIBC_HIDDEN__ void _start() { void (*start)(void); void* raw_args = (void*) ((uintptr_t) __built...原创 2019-02-16 14:04:16 · 904 阅读 · 0 评论 -
Android 动态链接器-ELF文件的加载
VerifyElfHeaderelf加载过程其实最主要的部分就是创建程序的段:ElfReader::ElfReader(const char* name, int fd, off64_t file_offset, off64_t file_size) : name_(name), fd_(fd), file_offset_(file_offset), file_size_(file_s...原创 2020-04-06 09:27:05 · 1004 阅读 · 0 评论 -
ELF文件分析
背景 一个程序要想运行,首先要加载到内存中,程序的pc指针指向内存中的代码,代码在执行的时候会在使用内存中的数据。这些数据可以分为两类:静态数据。动态数据。什么是动态数据呢,动态数据在程序运行过程中在堆或者栈上分配内存。而静态数据则不然,静态数据在代码编译完成后,就应该确定使用的地址和空间。静...原创 2020-04-04 10:31:53 · 979 阅读 · 0 评论 -
vfork文档
VFORK(2) Linux Programmer’s Manual ...原创 2020-01-30 19:02:07 · 240 阅读 · 0 评论 -
kset说明
1 概述 前面我们分析了kobject系统,知道kobjec对应于sysfs中的一个目录, 属性对应于sysfs中的普通目录, 属性可以用属性组来进行分组,方便管理。那么kobject如何分组呢,这就引出了kset,对kset就是一组kobject。 先来看下内核文档怎么说的:A kset is a...原创 2020-01-11 20:41:21 · 1178 阅读 · 0 评论 -
kobject系统分析
要说kobject不得不说sysfssysfs 是一个最初基于 ramfs 且位于内存的文件系统。它提供导出内核 数据结构及其属性,以及它们之间的关联到用户空间的方法。sysfs 始终与 kobject 的底层结构紧密相关。任何 kobject 在系统中注册,就会有一个目录在 sysfs 中被创建。这个目录是作为该 kobject 的父对象所在目录的子目录创建的,以准确地传递内核的对象层次...原创 2020-01-11 08:35:52 · 833 阅读 · 0 评论 -
ubuntu编译内核并更换
1 下载内核https://www.kernel.org/ 随便找一个内核下载,笔者以最新的linux-5.4.7 为例子tar xvf linux-5.4.7.tar.xzcd linux-5.4.7cp /boot/config-3.13.0-32-generic .configyes “” | make oldconfigmake modulessudo make modul...原创 2020-01-05 10:03:10 · 1082 阅读 · 1 评论 -
pci(一)说明
pci总线,如果不说人话的话,那是相当复杂的, 难以理解的。说起pci总线要从总线开始:微机原理上这么说:计算机系统是由许多具有独立功能的模块互相连接组成的。 同时,随着计算机的不断发展和广泛应用,各厂商处理向用户提供整套系统外, 还设计和提供各种功能的插件模块, 让用户根据需要构成应用系统活着扩充原有的系统。这些模块间需要互相通信,需要高速,可靠的信息交换通道,这就产生了总线的概念。其实这...原创 2019-11-02 13:16:55 · 622 阅读 · 0 评论 -
acpi table解析过程分析
acpi表结构大概是这样的知道了表的大概结构我问来分析的解析的过程解析的入口函数为acpi_tb_parse_root_table 函数/******************************************************************************* * * FUNCTION: acpi_tb_parse_root_table *...原创 2019-06-22 13:30:21 · 6086 阅读 · 0 评论 -
acpi设备管理分析
acpi_init[ 0.869605] [<c074461f>] dump_stack+0x49/0x73[ 0.869813] [<c022fb0c>] warn_slowpath_common+0x62/0x79[ 0.870005] [<c0485b68>] ? platform_device_alloc+0x72/0x7c...原创 2019-06-17 19:24:01 · 3505 阅读 · 1 评论 -
kernel log dumpstack实现
最近在使用WARN_ON的时候发现打印的栈中出现?,好像并不是正常的调用栈,因为好多函数对应不上,所以分析一番[ 1.245816] [<c0743af5>] dump_stack+0x49/0x73[ 1.246279] [<c022fe2e>] warn_slowpath_common+0x62/0x79[ 1.246855] [<c...原创 2019-05-19 10:28:19 · 1777 阅读 · 0 评论 -
linux内核启动init.setup执行流程
[ 1.245816] [] dump_stack+0x49/0x73[ 1.246279] [] warn_slowpath_common+0x62/0x79[ 1.247396] [] warn_slowpath_null+0xf/0x13[ 1.247899] [] goldfish_pipe_probe+0x16/0x17e[ 1.248428...原创 2019-05-21 21:50:26 · 701 阅读 · 0 评论 -
linux task_struct栈结构说明
struct thread_info {struct task_struct *task;struct exec_domain *exec_domain;__u32 flags;__u32 cpu;mm_segment_t addr_limit;__s32 preempt_count;struct restart_block restart_block;};static inl...原创 2019-05-18 16:11:17 · 876 阅读 · 0 评论 -
kobject学习
#include <linux/kobject.h>#include <linux/string.h>#include <linux/sysfs.h>#include <linux/module.h>#include <linux/init.h>/* * This module shows how to create a s...原创 2019-06-01 11:13:26 · 515 阅读 · 0 评论 -
kset学习
/* * Sample kset and ktype implementation * * Copyright (C) 2004-2007 Greg Kroah-Hartman <greg@kroah.com> * Copyright (C) 2007 Novell Inc. * * Released under the GPL version 2 only. * */...原创 2019-06-01 16:33:15 · 209 阅读 · 0 评论 -
linux platform总线初始化流程分析
内核在初始化的过程中调用platform_bus_init()函数来初始化平台总线,调用流程如下kernel_init_freeable()->do_basic_setup() -> driver_init()->platform_bus_init()我们直接分析platform_bus_init函数drivers/base/platform.c , linux代码还是很简...原创 2019-06-02 10:44:17 · 969 阅读 · 0 评论 -
platform driver注册过程
platform 总线上的驱动注册一般使用module_platform_driver宏,如goldfish设备的注册module_platform_driver(goldfish_pipe);这个宏定义在/goldfish/include/linux/platform_device.h文件/* module_platform_driver() - Helper macro for driv...原创 2019-06-02 22:11:08 · 2118 阅读 · 0 评论 -
总线驱动设备匹配过程分析
platform bus匹配驱动和设备的函数在文件drivers/base/platform.c中如下/** * platform_match - bind platform device to platform driver. * @dev: device. * @drv: driver. * * Platform device IDs are assumed to be encod...原创 2019-06-09 13:38:36 · 2020 阅读 · 0 评论 -
从驱动程序角度分析高级io
熟悉类unix系统的朋友应该都知道,unix的哲学思想有三个: 1 一切皆文件 2 用简单的命令组合实现复杂的事情 3 不记得了今天要分析的高级io,自然离不开文件,驱动程序就更离不开文件了,熟悉unix编程的人都应该清楚,对于各种数据的读写,包括网络,文件,管道等都是通过fd去读写的,而这个fd正是通过打开文件获取的,对于驱动程序(/dev/目录)的访问和一些系统信息(/proc/目录),都原创 2017-01-20 17:14:05 · 433 阅读 · 0 评论