- 博客(80)
- 资源 (5)
- 收藏
- 关注
转载 Linux __setup解析
__setup这条宏在Linux Kernel中使用最多的地方就是定义处理Kernel的启动参数的函数及数据结构,宏定义如下:#define __setup(str, fn) \__setup_param(str, fn, fn, 0)#define __setup_param(str, unique_id, fn, early) \static char __setup_st
2014-08-28 10:03:50
852
原创 cat /proc/cpuinfo
Processor : ARMv7 Processor rev 5 (v7l) BogoMIPS : 799.53 Features : swp half thumb fastmult vfp edsp neon vfpv3 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x2 CPU part : 0xc
2014-08-27 20:43:03
2846
1
转载 seq_file文件的内核读取过程
seq_file文件的内核读取过程1 问题seq_file只是在普通的文件read中加入了内核缓冲的功能,从而实现顺序多次遍历,读取大数据量的简单接口。seq_file一般只提供只读接口,在使用seq_file操作时,主要靠下述四个操作来完成内核自定义缓冲区的遍历的输出操作,其中pos作为遍历的iterator,在seq_read函数中被多次使用,用以定位当前从内核自定义链表中读取
2014-08-27 19:01:31
1872
原创 __get_cpu_architecture
static int __get_cpu_architecture(void){ int cpu_arch; if ((read_cpuid_id() & 0x0008f000) == 0) { cpu_arch = CPU_ARCH_UNKNOWN; } else if ((read_cpuid_id() & 0x0008f000) == 0x00007000) {
2014-08-26 20:27:26
1390
原创 __enable_mmu
/* * Setup common bits before finally enabling the MMU. Essentially * this is just loading the page table pointer and domain access * registers. * * r0 = cp#15 control register * r1 = machi
2014-07-21 22:17:49
1261
原创 __v7_setup
.arm __HEADENTRY(stext) ARM_BE8(setend be ) @ ensure we are in BE8 mode THUMB( adr r9, BSYM(1f) ) @ Kernel is always entered in ARM. THUMB( bx r9 ) @ If this is a Thumb-2 kernel, THUMB( .th
2014-07-21 18:23:56
2183
原创 __create_page_tables
/* * Setup the initial page tables. We only setup the barest * amount which are required to get the kernel running, which * generally means mapping in the kernel code. * * r8 = phys_offset, r9 =
2014-07-21 17:42:15
1698
转载 ARM指令后缀与常用读取指令
一:指令可选后缀“S”后缀:指令中使用“S”后缀,指令执行后状态寄存器的条件标志位将被刷新;不使用“S”后缀时,指令执行后状态寄存器的条件标志位不会发生变化。此标志经常用于对条件进行测试,例如:是否溢出,是否进位等;根据这些变化,就可以进行一些判断,是否大于,是否相等,从而可能影响指令执行顺序。“!”后缀如果指令地址表达式中不含“!”后缀,则基址寄存器中的地址不会发生变化,指令中含有则
2014-07-21 11:18:32
5274
原创 __vet_atags
内核参数通过一个静态的tag链表在启动的时候传递到内核。每个tag的结构为 +-----------+ tag_header +-----------+ tag_xxx +-----------+ 其中tag_header为tag头,表明tag_xxx的类型和大小,之所以要标识tag_xxx的类型是因为不同的tag需要不同的处理
2014-07-19 16:34:31
1138
转载 指令+s对cpsr中标志位的影响
各标志位的含义如下:所有ARM数据处理指令的乘法指令均可选择使用S后缀,并影响状态标志位。而其它指令一般不允许加S后缀,如B 、LDR、SWI、MRS等。N 运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0; 例如:执行movs r0,#0x7FFFFFFF后N=0;因为R0最高位为0
2014-07-19 10:27:46
2437
转载 __lookup_processor_type
__FINIT .text/* * Read processor ID register (CP#15, CR0), and look up in the linker-built * supported processor list. Note that we can't use the absolute addresses * for the __proc_info li
2014-07-18 21:19:25
983
原创 __proc_info_begin->__proc_info_end
/arch/arm/kernel/head.S/* * Look in for information about the __proc_info structure. */ .align 2 .type __lookup_processor_type_data, %object
2014-07-18 21:11:59
2001
转载 compressed/head.s __setup_mmu
__setup_mmu: sub r3, r4, #16384 @ Page directory size,r3 = 0x20004000 bic r3, r3, #0xff @ Align the pointer bic r3, r3, #0x3f00@ 这里r4中存放着内核执行地址,将16K的一级页表放在这个内核执行地址下面的16K空间里,@ 上面通过 sub r3,
2014-07-17 15:54:01
1314
转载 linux命令 ld使用
使用ld********本文档介绍GNU连接器ld的2.14版本.本文档在GNU自由文档许可证下发行.在"GNU自由文档许可证"一章中有关于本许可证的一份拷贝.概述********'ld'把一定量的目标文件跟档案文件连接起来,并重定位它们的数据,连接符号引用.一般,在编译一个程序时,最后一步就是运行'ld'.'ld'能接受连接命令语言文件,这是一种用
2014-07-14 14:59:38
2572
转载 Linux内核源码分析--zImage出生实录(Linux-3.0 ARMv7)
原文地址:Linux内核源码分析--zImage出生实录(Linux-3.0 ARMv7) 作者:tekkamanninja 此文为两年前为好友刘庆敏的书《嵌入式Linux开发详解--基于AT91RM9200和Linux 2.6》中帮忙写的章节的重新整理。如有雷同,纯属必然。经作者同意,将我写的部分重新整理后放入blog中。~~~~~~~~~~~~~~~~~~~~~~~~
2014-07-13 13:14:02
1051
转载 ARM linux解析之压缩内核zImage的启动过程 三
ARM linux解析之压缩内核zImage的启动过程 B (转载) ARM linux解析之zImage镜像文件的生成 (转载)ARM linux解析之压缩内核zImage的启动过程 C (转载) 2014-04-03 16:32:19| 分类:Technology | 标签: |举报|字号大中小 订阅
2014-07-12 21:23:49
2138
1
转载 B、BL、BX、BLX 和 BXJ
B、BL、BX、BLX 和 BXJ跳转、带链接跳转、跳转并切换指令集、带链接跳转并切换指令集、跳转并转换到 Jazelle 状态。语法op1{cond}{.W} labelop2{cond} Rm其中:op1是下列项之一:B跳转。BL带链接跳转BLX带链接跳转并切换指令集。op2是下列项之一:BX跳转并切换指令集。BLX带
2014-07-12 17:15:56
2293
原创 bl cache_on跳转的返回
bl cache_oncache_on: mov r3, #8 @ cache_on function b call_cache_fncall_cache_fn: adr r12, proc_types#ifdef CONFIG_CPU_CP15 mrc p15, 0, r9, c0, c0 @ get processor ID#else ldr r9, =C
2014-07-12 17:07:37
1163
转载 arm汇编指令整理
1. .align.align的作用在于对指令或者数据的存放地址进行对齐,有些CPU架构要求固定的指令长度并且存放地址相对于2的幂指数圆整,否则程序无法正常运行,比如ARM;有些系统却不需要,如果不遵循地址的圆整规则,程序依然可以正确执行,只是降低了一些执行效率,比如i386。.align的作用范围只限于紧跟它的那条指令或者数据,而接下来的指令或者数据的
2014-07-12 15:48:41
3619
转载 ARM linux解析之压缩内核zImage的启动过程 二
3. 。text段开始,先是内核解压地址的确定 再往下看,代码如下: .text#ifdef CONFIG_AUTO_ZRELADDR @ determine final kernel image address mov r4, pc a
2014-07-12 15:42:15
3528
转载 ARM linux解析之压缩内核zImage的启动过程 一
首先,我们要知道在zImage的生成过程中,是把arch/arm/boot/compressed/head.s 和解压代码misc.c,decompress.c加在压缩内核的最前面最终生成zImage的,那么它的启动过程就是从这个head.s开始的,并且如果代码从RAM运行的话,是与位置无关的,可以加载到内存的任何地方。下面以arch/arm/boot/compressed/head.s为
2014-07-12 15:36:44
1513
转载 bootloader之little kernel
LK是什么 LK 是 Little Kernel 它是 appsbl (Applications ARM Boot Loader)流程代码 ,little kernel 是小内核小操作系统。 LK 代码 在 bootable/bootloadler/lk 目录下 LK 代码结构 +app
2014-07-07 18:14:07
5220
转载 探讨蓝牙协议栈的原理和结构
蓝牙,这个已经不是什么新鲜的技术了,相信大多数人都是了解的。那么对于这方面,我们可以在嵌入式操作中进行一下实现。在蓝牙系统中,为了支持不同应用,需要使用多个协议,这些协议按层次组合在一起,构成了蓝牙协议栈.蓝牙协议栈是蓝牙技术的核心组成部分,它能使设备之间互相定位并建立连接,通过这个连接,设备间能通过各种各样的应用程序进行交互和数据交换. 1、蓝牙协议栈体系结构 蓝牙协议栈体系结构为分
2014-03-19 15:37:07
1105
转载 探讨蓝牙协议栈的原理和结构
蓝牙,这个已经不是什么新鲜的技术了,相信大多数人都是了解的。那么对于这方面,我们可以在嵌入式操作中进行一下实现。在蓝牙系统中,为了支持不同应用,需要使用多个协议,这些协议按层次组合在一起,构成了蓝牙协议栈.蓝牙协议栈是蓝牙技术的核心组成部分,它能使设备之间互相定位并建立连接,通过这个连接,设备间能通过各种各样的应用程序进行交互和数据交换. 1、蓝牙协议栈体系结构 蓝牙协议栈体系结构为分
2014-03-19 15:30:07
1955
转载 bluetooth之power on流程
Bluetooth服务(以及蓝牙的A2DP服务)都是通过SystemServer启动(frameworks/base/services/java/com/android/server/SystemServer.java) Frameworks层(frameworks/base/core/java/android/server/BluetoothService.java, fun
2014-03-18 20:05:37
5097
原创 bluetooth数据收发
net/socket.cSYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)->sock_create()->__sock_create()->pf = rcu_dereference(net_families[family]);err = pf->create(net, sock, protocol, kern)
2014-03-18 17:14:07
1473
原创 linux-uart
drivers/ttytty_write()->(ld->ops->write)//调用线路规程的ld->ops的write(n_tty_write)console_init()->tty_ldisc_begin()->tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY)tty_ldiscs[disc] = new_ldisc;//设置ld->ops
2014-03-13 13:53:35
1389
转载 Linux 下 stdin stdout stderr 的由来
现在就从linux kernel的源代码的角度来分析该问题fork()与execve()中stderr,stdio.stdout的继承关系其实用继承这个词好像不太准确,要准确一点,可能复制更适合.首先有2点:1:父进程fork出子进程后,是共享所有文件描述符的(实际上也包括socket)2:进程在execve后,除了用O_CLOEXEC标志打开的文件外,其它的文件描述符都是会复
2014-03-12 12:42:35
2175
原创 glibc-printf
printf()函数定义在stdio-common/printf.c#include #include #include #undef printf/* Write formatted output to stdout from the format string FORMAT. *//* VARARGS1 */int__printf (const char *format
2014-03-11 19:03:13
1919
转载 内存储器管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程中的一些概念性问题,并没有深入地阅读分析源码,我也是草草翻过这本书,请有兴趣的朋友自己参考相关资料。此书出版较早,分析的版本为2.4.16,故出现的一些概念可能跟最新版本内核不同。此书已经开源,阅读地址 ht
2014-03-11 12:40:29
1068
转载 使用 ftrace 调试 Linux 内核,第 3 部分
ftrace 是 Linux 内核中提供的一种调试工具。使用 ftrace 可以对内核中发生的事情进行跟踪,这在调试 bug 或者分析内核时非常有用。本系列文章对 ftrace 进行了介绍,分为三部分。本文是第三部分,通过示例代码介绍如何在代码中使用 ftrace 提供的工具函数,以与 ftrace 交互。通过本文的讲解,读者可以在实际代码中使用 ftrace,方便了调试和分析。内核头文件 i
2014-03-11 12:18:16
727
转载 使用 ftrace 调试 Linux 内核,第 2 部分
ftrace 是 Linux 内核中提供的一种调试工具。使用 ftrace 可以对内核中发生的事情进行跟踪,这在调试 bug 或者分析内核时非常有用。本系列文章对 ftrace 进行了介绍,分为三部分。本文是第二部分,通过示例介绍了如何使用 ftrace 中的跟踪器,并对不同格式的跟踪信息进行了描述,同时还对如何使用 ftrace 调试指定内核模块进行了介绍。通过对本文的学习,读者可以了解如何在实
2014-03-11 11:18:14
950
转载 使用 ftrace 调试 Linux 内核,第 1 部分
概述ftrace 是 Linux 内核中提供的一种调试工具。使用 ftrace 可以对内核中发生的事情进行跟踪,这在调试 bug 或者分析内核时非常有用。本系列文章对 ftrace 进行了介绍,分为三部分。本文是第一部分,介绍了内核相关的编译选项、用户态访问 ftrace 的接口、ftrace 的数据文件,并对 ftrace 提供的跟踪器的用途进行了介绍,以使读者更好的了解和使用该工具。f
2014-03-11 10:20:55
755
转载 Linux下的一个全新的性能测量和调试诊断工具Systemtap[1]kprobe
本系列文章详细地介绍了一个Linux下的全新的调式、诊断和性能测量工具Systemtap和它所依赖的基础kprobe以及促使开发该工具的先驱DTrace并给出实际使用例子使读者更进一步了解和认识这些工具。本文是该系列文章之一,它讲解了kprobe的原理、编程接口、局限性和使用注意事项并给出实际使用示例帮助读者理解和认识kprobe。本系列文章之二讲解了DTrace以及Systemtap与DTrac
2014-03-10 19:32:33
899
转载 kprobe module code
#include #include #include #include #include #include #include #include #include /* pre_handler: this is called just before the probed instruction is * executed. */static int handler_p
2014-03-10 19:13:35
736
转载 jprobe module code
#include #include #include #include #include #include #include #include #include #include static irqreturn_t ts_interrupt_probe(int irq, void *dev_id){ printk("KERN_INFO %s: irq = %d\n",
2014-03-10 19:12:13
722
转载 ARM Linux异常处理之data abort
本文简要分析了ARM Linux的data abort异常处理过程,内核版本2.6.28,s3c6410平台。1 异常向量与程序跳转data abort是ARM体系定义的异常之一。异常发生时,ARM会自动跳转到异常向量表中,通过向量表中的跳转命令跳转到相应的异常处理中去。ARM的异常处理向量表在entry-armv.S文件中: .globl __vectors
2014-03-04 21:23:19
4301
原创 completion
1 数据结构struct completion { unsigned int done; wait_queue_head_t wait;//等待队列头};2 初始化2.1 动态static inline void init_completion(struct completion *x){ x->done = 0; init_waitqueue_head(&x->wai
2014-01-20 21:03:59
1263
STM32固件库使用手册
2013-12-25
stm32 datasheet
2013-12-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人