自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

行善之人必有余庆

If you want it ,do for it.

  • 博客(32)
  • 资源 (20)
  • 收藏
  • 关注

原创 pci总线扫描设备本地操作(二)(local bus operation)

当type1命令通过桥片转换为type0命令格式或者是type0命令在到达总线后,是怎么查找到设备的呢?接下来就看一下这个过程的操作。type0命令只是在本地总线进行操作,不会传递到其他总线上,如果要查找的设备在其他总线上,那就会被master-abort终止。type1命令会在不同的总线上进行传播,直到找到对应设备所在桥片后转换为type0格式,并且除了pci桥其他设备不会对

2017-11-30 16:43:47 1210

原创 pci总线扫描操作一(pci桥操作)

cpu和pci总线相连时通过pci桥片,也就是在查找设备时,主要是桥片产生的命令,然后进行设备的查找。一,怎么看手册两个手册:a,PCI Local Bus Specification Revision 3.0b,PCI-to-PCI Bridge Architecture Specification Version 1.2a文档是讲解pci总线的本地总线(local bus)

2017-11-30 16:12:56 3857

原创 一篇讲解PCI架构的好文章

一篇外国人写的讲解pci的文章,很清楚,很细致,看完能对pci有一个清晰的了解。http://tldp.org/LDP/tlk/dd/pci.html

2017-11-24 14:17:59 692

原创 mips架构linux启动分析(六)(arch_mem_init(node内存)内存初始化)

这里开始就是各个node的内存的初始化了。OK,直接看代码.static void __init arch_mem_init(char **cmdline_p){ extern void plat_mem_setup(void);//定义板级的屏幕的相关信息 plat_mem_setup();//把代码段也加入到boot_mem_map进行管理(bootm机制) arch_m

2017-11-22 09:42:09 1089

原创 linux中bootmem分析

bootmem机制是在linux启动期间,buddy管理器,slab管理器没有初始化好时使用的内存管理方法。之后系统起来之后,就交由buddy等方法来管理了。在多核系统中,每个核都对应这个一个node_data结构体,其中就记录着这个核使用的内存,也包括了bootmem的信息。看一下node_data的结构体#define LEVELS_PER_SLICE 1

2017-11-21 20:36:06 742

原创 linux中memblock的使用

memblock是linux用于管理内存的一种机制。接下来说一些这个机制的初始化,以及其操作方法。先看一下memblock中使用的结构体://memblock中的flagenum { MEMBLOCK_NONE = 0x0, /* No special request */ MEMBLOCK_HOTPLUG = 0x1, /* hotpluggable region */ M

2017-11-21 19:45:10 2289 1

原创 GNU中attribute中的cold和hot

cold The cold attribute on functions is used to inform the compiler that thefunction is unlikely to be executed. The function is optimized for size rather than speed and on many targets it is p

2017-11-21 15:59:15 3585

原创 mips架构linux启动分析(五)(bootmem和blockmem机制的初始化)(prom_init_numa_memory)

这篇内容涉及到了对bootmem和memblock机制的使用(当然了bootmem就是在系统启动时使用的),不会展开太多进行说明。后面会单独拿出来说一下。PS: 这里涉及到很对node和cpu这些全局或局部变量的使用,有什么区别吗?说明一下:感觉应该是一样的,这样就导致了分析代码页不好分析。    其实比较简单。在一个主板上,如果有4个处理器(不管这个处理器是不是多核)

2017-11-21 15:24:21 1025

转载 vim中的折叠功能

vim代码折叠功能问题:怎样在vim中实现代码折叠功能?      解决方法:直接使用vim自带的快捷键和命令,便可以实现功能强大的折叠    小试折叠:  1  :set fdm=marker  在vim中执行该命令  2  5G  将光标跳转到第5行  3  zf10G  折叠第5行到第10行的代码,vim会在折叠的开始和结束自动添加三个连续的花括号作为标记  4  zR 

2017-11-20 15:11:03 1918

原创 mips架构linux启动分析(四)(接收bios信息和环境初始化)

老样子先看函数把.void __init prom_init(void){//初始化命令 prom_init_cmdline();//初始化环境 prom_init_env();//这里所作的是把桥片进行了一些配置 if (loongson_pch) loongson_pch->early_config();#ifdef CONFIG_NUMA prom_init_n

2017-11-17 18:11:53 1294

原创 linux中platform总线解析(四)(platform设备注册后自动匹配驱动)

当一个platform设备注册后,就会自动为其匹配驱动,这是怎么做到的呢?其实前面的分析已经有提到。这里只说函数调用,以及关键的部分,具体的不再分析。下面再来分析一次。这里函数进行了删减,把这个自动匹配的过程突显出来。具体的函数调用关系:platform_add_devices--->platform_device_register---->platform_dev

2017-11-17 17:38:07 398

原创 linux中platform总线解析(三)(platform驱动的注册)

直接看代码。其中注册过程中用到的一些重要的结构体:platform_driver结构:struct platform_driver { int (*probe)(struct platform_device *); int (*remove)(struct platform_device *); void (*shutdown)(struct platform_device *)

2017-11-17 17:21:51 345

原创 linux中platform总线解析(二)(platform设备的注册)

这里分析的是linux3.10内核,mips架构。然后说一下platform设备注册的时机:那是系统启动到什么时候调用的呢?就是在device_initcall阶段,也就是对应的对应6阶段。看一下函数调用:ls2h_device-initcall--->platform_add_devices(ls2h_platform_devices,ARRAY_SIZE(ls2h_pl

2017-11-17 16:39:04 571

原创 linux中platform总线解析(一)(platform总线初始化)

platform初始化的函数调用:start_kernel-->rest_init-->kernel_init-->kernel_init_freeable-->do_base_setup--->driver_init--->platform_bus_init初始化函数:platform初始化函数:int __init platform_bus_init(void){

2017-11-17 11:35:16 1024

原创 linux中的typeof使用

Another way to refer to the type of an expression is with typeof. The syntax of using of this keyword looks likesizeof, but theconstruct acts semantically like a type name defined withtypedef.Th

2017-11-15 09:44:37 653

转载 一篇不错的关于GCC特性的文章

Linux 内核中的 GCC 特性了解用于 C 语言的 GCC 扩展文章原来的地址:https://www.ibm.com/developerworks/cn/linux/l-gcc-hacks/GCC 和 Linux 是出色的组合。尽管它们是独立的软件,但是 Linux 完全依靠 GCC 在新的体系结构上运行。Linux 还利用 GCC 中的特性(称为扩展)实

2017-11-15 09:34:09 407

转载 GNU中__attribute__机制介绍

1. __attribute__ GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)__attribute__前后都有两个下划线,并且后面会紧跟一对原括弧,括弧里面是相应的__attrib

2017-11-14 21:01:04 242

原创 mips架构linux启动分析(三)(setup_arch--->cpu_probe)

接下来就要介绍板级初始化了。这篇主要是说一下板级初始化函数setup_arch中的cpu_probe函数。这里看一下setup_arch函数的样子:void __init setup_arch(char **cmdline_p){ cpu_probe(); prom_init();#ifdef CONFIG_EARLY_PRINTK setup_early_printk

2017-11-14 20:20:03 1236

原创 介绍GNU中__attribute__机制的网址

这里记录一下介绍gnu中__attribute__机制的网址http://www.unixwiz.net/techtips/gnu-c-attributes.html介绍GNU中对C扩展的网址https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/C-Extensions.html#C-ExtensionsGNU中特点介绍的首页https://

2017-11-14 19:29:59 217

转载 mips汇编程序中的.set指令使用

.set push --> save all settings .set reorder/noreorder --> let/don't let assembler reorder instructions .set at/noat --> let/don't let assembler use the register $at in instruction aliases (li,la,

2017-11-14 15:49:21 7945

原创 __read_mostly的使用

在linux中好多内容被定义为__read_mostly,那么这有什么作用呢?首先看一个使用:structr cpuinfo_mips cpu_data[NR_CPUS] __read_mostly再看一下其定义:#define __read_mostly __attribute__((__section__(".data..read_mostly")))也就是说被__rea

2017-11-14 14:19:32 5668

原创 mips架构linux启动分析(二)

在start_kernel函数的开始部分:asmlinkage void __init start_kernel(void){ char * command_line; extern const struct kernel_param __start___param[], __stop___param[]; lockdep_init(); smp_setup_processor_

2017-11-14 11:59:46 580

原创 ____cacheline_aligned和____cacheline_aligned_in_smp

这两个都属于GCC扩展函数。____cacheline_aligned instructs the compiler to instantiate a struct or variable at an address corresponding to the beginning of an L1 cache line, for the specific architecture, i.e

2017-11-14 11:29:03 5362

转载 mips架构中的原子操作指令(llsc)

在多线程程序中,为了实现对共享变量的互斥访问,一般都会用spinlock实现,而spinlock需要一个TestAndSet的原子操作。而这种原子操作是需要专门的硬件支持才能完成的,在MIPS中,是通过特殊的Load,Store操作LL(Load Linked,链接加载)以及SC(Store Conditional,条件存储)完成的。LL 指令的功能是从内存中读取一个字,以实现接下来的

2017-11-14 10:05:50 2874

原创 int __builtin_constant_p (exp)函数的使用

int __builtin_constant_p (exp)是GCC内置函数功能:— Built-in Function: int __builtin_constant_p (exp)You can use the built-in function __builtin_constant_p todetermine if a value is known to be consta

2017-11-14 09:40:09 549

转载 别人分析的mips架构的linux启动第一步(作为对比)

系统加电启动后,MIPS处理器默认的程序入口是0xBFC00000(虚拟地址),此地址在KSEG1(无缓存)区域内,对应的物理地址是0x1FC00000(高3位清零),所以CPU从物理地址0x1FC00000开始取第一条指令,这个地址在硬件上已经确定为FLASH(BIOS)的位置,BIOS将Linux内核镜像文件拷贝到RAM中某个空闲地址(LOAD地址)处,然后一般有个内存移动的操作(Entry

2017-11-13 17:27:19 2572

原创 分析mips架构linux启动流程(一)

mips架构内核启动时默认从BFC00000地址开始取指运行,也就是对应KSEG1,物理地址的1fc00000开始运行。在文件arch/mips/kernel/vmlinux.lds中指定了第一个运行的函数:#define mips mipsOUTPUT_ARCH(mips)ENTRY(kernel_entry)PHDRS { text PT_LOAD FLAGS(7); /*

2017-11-13 17:05:46 2226 1

转载 GCC对C语言的一些扩展小结

最近在看一些源代码,遇到了一些使用__attribute__修饰函数和变量的属性方面的代码,不是太了解,很是汗颜,再此做个总结:GCC使用__attribute__关键字来描述函数,变量和数据类型的属性,用于编译器对源代码的优化。描述函数属性的几个重要的关键字:void noreturnfun() __attribute__((noreturn));//函数

2017-11-09 17:32:33 545

转载 linux中noinline和inline关键字解析

noinline关键字用来通知编译器不要内联这个函数。【赛迪网讯】inline属性在使用的时候,要注意以下两点:inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。从inline的作用来看,其放置于函数声明中应当也是毫无作用的:inline只会影响函数在translationunit(可以

2017-11-09 17:30:21 4133

转载 linux中asmlinkage宏的解析

在linux内核代码中,经常看到asmlinkage限定词,例如:asmlinkage long sys_getpid(void)等,介绍如下:asmlinkage 的定义(/usr/include/asm/linkage.h里面):#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))__attribute__是关键

2017-11-09 16:20:59 793

转载 linux中asmlinkage宏的使用

asmlinkage是个宏,使用它是为了保持参数在stack中。看一下/usr/include/asm/linkage.h里面的定义:#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))其中 __attribute__是关键字,是gcc的C语言扩展。__attribute__机制是GNU C的一大特色

2017-11-09 16:19:30 309

转载 linux宏定义likely和unlikely解析

在看linux内核代码的时候,经常会看到likely(x)和unlikely(x)宏的使用。那这两个宏有什么作用呢?这两个宏在内核中的定义如下:# define likely(x) __builtin_expect(!!(x), 1)# define unlikely(x) __builtin_expect(!!(x), 0)可见这里使用了gcc的内建函数__builtin_e

2017-11-09 15:30:13 272

OPENGL ES 3.0编程指南

OPENGL ES 3.0编程指南

2022-02-25

OpenGL 4 Shading Language Cookbook(2nd)

OpenGL 4 Shading Language Cookbook(2nd)

2022-02-25

maven权威指南英文原版

官方的maven权威指南原版书籍,关于maven使用有困惑的可以看一下,受益匪浅。

2019-03-10

emacs使用简介

emacs工具的使用入门简介,配置,快捷键的使用

2019-02-26

loongson1B处理器用户手册

loongson1B处理器用户手册。 单核处理器,是驱动开发人员必备参考。

2017-11-09

loongson2H处理器手册

loongson2H处理器用户手册。 单核处理器,是驱动开发人员必备参考。

2017-11-09

loongson2F处理器手册

loongson2F处理器用户手册。 单核处理器,是驱动开发人员必备参考。

2017-11-09

loongson3A处理器用户手册

中科院loongson3A处理器官方手册。 4核mips架构的处理器,开发必备

2017-11-09

elf-64位标准

elf格式程序的规范。 对于理解linux重应用程序的链接,加载,运行以及其他关键段信息必备

2017-11-09

mips32位ABI标准

mips架构规定的二进制ABI标准规范。 对于汇编以及底层的驱动必备

2017-11-09

mips-programmer-manual

mips架构的官方文档,对于架构的指令以及内存等设计讲解的非常清楚。(毕竟是人家发明的)属于开发人员必备

2017-11-09

《LINUX内核修炼之道》

《LINUX内核修炼之道》。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

2017-10-26

ARM GCC Inline Assembler Cookbook.pdf

介绍ARM编程中嵌入汇编的使用

2017-05-27

vxworks_kernel_programmers_guide_6.8.pdf

vxWorks内核官方文档介绍,详细介绍了实时内核的构造

2017-05-27

mips架构官方文档

mips架构官方文档

2017-05-27

gcc工具介绍

gcc工具链官方介绍文档

2017-05-27

js从入门到精通 高宏编著

配合代码看书,效果更好。 高宏编著 javascript入门到精通

2017-05-27

A Byte of Python3(中文版).pdf带源代码.rar

A Byte of Python3(中文版).pdf带源代码.rar 入门好书,配合代码,无敌了

2017-05-27

Head+First+Python(中文版+标签).pdf

python入门书籍

2017-05-27

黑客入侵事例

网络安全技术,是一位黑客自己的入侵记录,知己知彼所以也是网络安全员的必学只是

2015-03-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除