
linux-内核篇
文章平均质量分 72
zll5258
这个作者很懒,什么都没留下…
展开
-
linux之slimbus设备注册
subsys_initcallmsm_slim_init) -----------------------------------------------------------------------kernel\drivers\slimbus\slim-msm-ctrl.c |-->plarform_driver_register($msm_slim_driver)原创 2016-01-27 11:37:08 · 870 阅读 · 0 评论 -
IO管理六Usb之dts
Kernel/of/base.cStatic intzll=0;struct device_node *of_find_node_by_path(const char *path){struct device_node *np = of_allnodes;unsigned long flags;if(zll ==0){zll = 1;for (; np; np原创 2016-05-03 11:35:17 · 1613 阅读 · 0 评论 -
early_param流程
Linux内核源码中多处会看到诸如__init,__initdata,__exitdata的关键字, 大部分这样的关键字定义在include/linux/init.h头文件中,它们都会在编译连接阶段被实现处理。 #define __init __section(.init.text) __cold notrace __init标记的数据被存储在.init.text节 #de原创 2016-11-08 15:32:44 · 2579 阅读 · 0 评论 -
.init.setup 位置
在内核里经常可以看到__init,__devinit这样的语句,这都是在init.h中定义的宏,gcc在编译时会将被修饰的内容放到这些宏所代表的section。其典型的定义如下:#define __init __section(.init.text) __cold notrace#define __initdata __section(.init.data)转载 2016-11-08 15:44:29 · 445 阅读 · 0 评论 -
cmdline传递
uboot向kernel的传参机制——bootm与tags 一uboot 如何启动 kernel1 do_bootmuboot下使用bootm命令启动内核镜像文件uImage,uImage是在zImage头添加了64字节的镜像信息供uboot解析使用,具体这64字节头的内容,我们在分析bootm命令的时候就会一一说到,那直接来看bootm命令。在common转载 2016-11-08 15:46:03 · 1677 阅读 · 0 评论 -
.initcall##level##.init
//-----------------------kernel/init/main.c static void __init do_initcall_level(int level){extern const struct kernel_param __start___param[],__stop___param[];initcall_t *fn; strcpy(sta原创 2016-11-08 17:07:21 · 1133 阅读 · 0 评论 -
Linux内核中的初始化initcall_t
基于Linux 2.6.32include\asm-generic\Vmlinux.lds.h中有如下定义:这等于是安排了名称如.initcall[s].init的一系列section的顺序,level越小,越靠前。符号__initcall_start记录了这片区域的开始,__initcall_end符号记录了这片区域的结束。__early_initcall_end则将这片区域更进转载 2016-11-08 17:08:31 · 1064 阅读 · 0 评论 -
Uart-log-ALL
[156940] fastboot: download:009ead28[158410] fastboot: flash:boot[158410] boot is not yl image[158610] fastboot: reboot[158610] rebooting the device[158610] SCM call: 0x2000110 failed with :原创 2016-11-08 17:12:46 · 6199 阅读 · 0 评论 -
Android启动流程 -- linux kernel
linux启动 一、zImage是怎样炼成的? zImage是linux内核编译之后产生的最终文件,它的生成过程比较复杂,这里不谈编译过程,只聊聊编译的最后阶段: 1. arm-linux-gnu-ld用arch/arm/kernel/vmlinux.lds、arch/arm/kernel/head.o、arch/arm/kernel/init_转载 2016-11-08 17:14:53 · 404 阅读 · 0 评论 -
gpio
- qcom,pin-type-*:identifies the pin type. Pin types supported are 24 qcom,pin-type-gp: General purpose 25 qcom,pin-type-sdc: SDC Gpio原创 2016-11-09 11:14:47 · 298 阅读 · 0 评论 -
IO管理五Usb之resource资源初始化
kernel_init //-----------------------kernel\init\main.c-->kernel_init_freeable -->do_basic_setup -->do_initcalls -->do_initcall_level-->do_one_initcall原创 2016-05-03 11:24:52 · 426 阅读 · 0 评论 -
IO管理三usb之irq
Kernel/drivers/of/irq.c unsignedint irq_of_parse_and_map(structdevice_node *dev, int index){struct of_irq oirq;if(strcmp(dev->name,"usb")== 0){pr_err("zll----0-dev->name=%s !\n",dev->nam原创 2016-05-03 10:42:28 · 1478 阅读 · 0 评论 -
IO管理四Usb之resource资源申请
#define MSM_USB_BASE (motg->regs)#defineUSB_USBINTR (MSM_USB_BASE + 0x0148) Probe(){res = platform_get_resource_byname(pdev, IORESOURCE_MEM,"core");获取core的资源 motg->io_res =原创 2016-05-03 10:48:22 · 289 阅读 · 0 评论 -
linux之spmi设备注册
Kernel/drivers/base/core.c:1002 device_add()Kernel/drivers/spmi/spmi.c:228 spmi_add_device()Kernel/drivers/spmi/spmi.c:260 spmi_new_device()Kernel/drivers/of/of_spmi.c: 221 spmi_of_create_device原创 2016-01-27 11:38:46 · 2950 阅读 · 0 评论 -
Git活动提交常见错误总结
问题一、当遇到在一个分支上面提交活动失败时,可以用下面步骤解决:1、git checkout -b new_branch remote/branch(建一个新的分支) 2、git log--oneline -10(查看在线的活动) 3、git show --raw(查看ffff活动修改的内容)-------------可选 4、gitcherry-pick //原创 2016-02-05 09:16:10 · 1736 阅读 · 0 评论 -
linux之i2c设备注册
|-->arch_initcall(i2c_msm_init) -----------------------------------------------------------------------kernel\drivers\i2c\busses\I2c-msm-v2.c |-->plarform_driver_register($i2c_msm_driver)原创 2016-01-27 11:29:18 · 1117 阅读 · 1 评论 -
内存管理三之函数篇
本文主要介绍内存申请的函数介绍:1.vmalloc kmalloc 是用来分配内核空间内存的,malloc是用来分配用户空间的内存的。kmalloc分配的页在物理地址上是连续的(虚拟地址自然也是连续的), vmalloc只确保页在虚拟地址空间内是连续的。它通过非连续的物理内存块,再“修正”页表,把内存映射到逻辑地址空间是连续的区域内。 malloc返回的也在进程的虚拟地转载 2016-04-29 14:29:08 · 487 阅读 · 0 评论 -
内存管理一之基础
本文主要以32位机器为准。1.0 虚拟地址、物理地址、逻辑地址、线性地址虚拟地址又叫线性地址。linux没有采用分段机制,所以逻辑地址和虚拟地址(线性地址)(在用户态,内核态逻辑地址专指下文说的线性偏移前的地址)是一个概念。物理地址则是内存的实际地址。内核的虚拟地址和物理地址,大部分只差一个线性偏移量。用户空间的虚拟地址和物理地址则采用了多级页表进行映射,但仍称之为线性地址原创 2016-04-28 15:18:41 · 432 阅读 · 0 评论 -
内存管理二之映射篇
上篇提到了内存管理的一些基本概念,本片介绍内存管理的虚拟地址与物理地址之间的映射关系。2.0 内核空间与物理地址之间的映射内核空间地址为3G~4G。由于开启了分页机制,内核想要访问物理地址空间的话,必须先建立映射关系,然后通过虚拟地址来访问。为了能够访问所有的物理地址空间,就要将全部物理地址映射到1G的内核线性空间中,这显然不可能。于是,内核将0~896M的物理地址空间一一映射到自转载 2016-04-29 11:44:46 · 314 阅读 · 0 评论 -
内存管理四之工作原理
1、ZoneLinux中Node、Zone和页的关系 每个结点的内存被分为多个块,称为zones,它表示内存中一段区域。一个zone用struct zone结构描述,zone的类型主要有ZONE_DMA、ZONE_NORMAL和ZONE_HIGHMEM。ZONE_DMA位于低端的内存空间,用于某些旧的ISA设备。ZONE_NORMAL的内存直接映射到Linux内核线性地址空间的高端部分转载 2016-04-29 14:38:11 · 486 阅读 · 0 评论 -
IO管理一基础
从CPU连出来一把线:数据总线、地址总线、控制总线,这把线上挂着N个接口,有相同的,有不同的,名字叫做存储器接口、中断控制接口、DMA接口、并行接口、串行接口、AD接口……一个设备要想接入,就用自己的接口和总线上的某个匹配接口对接……于是总线上出现了各种设备:内存、硬盘,鼠标、键盘,显示器……外设都是通过读写设备上的寄存器来进行的,外设寄存器也称为“I/O端口”,而IO端口有两种编址方转载 2016-05-03 10:31:07 · 492 阅读 · 0 评论 -
IO管理二IORESOURCE_IO和IORESOURCE_MEM
内核中有很多资源,但属于IO资源的有:#define IORESOURCE_IO 0x00000100 /* Resource type */#defineIORESOURCE_MEM 0x00000200#define IORESOURCE_IRQ 0x00000400#define IORESOURCE_DMA 0x000转载 2016-05-03 10:43:53 · 1163 阅读 · 0 评论 -
init_task
版权声明:本文为博主原创文章,未经博主允许不得转载。init_task是kernel的第一个进程,0号进程,当kernel初始化完成后,它便化身为idle进程出现在我们的面前。一init_thread_unionunionthread_union init_thread_union __init_task_data = { INIT_THREAD_INFO(init_转载 2017-01-16 17:46:07 · 4150 阅读 · 0 评论