- 博客(63)
- 资源 (54)
- 收藏
- 关注
原创 uclinux-2008r1-rc8(bf561)内核的console(3):通过console输出信息
1.3 通过console输出信息在内核中,向console输出信息是通过release_console_sem函数来完成的:/** * release_console_sem - unlock the console system * * Releases the semaphore which the caller holds on the console sy
2008-05-29 22:54:00 1772
原创 uclinux-2008r1-rc8(bf561)内核的console(2):驱动初始化
1.2 驱动初始化1.2.1 console_init我们知道,在uclinux初始化过程中,直到console_init调用之前是没有任何输出的,它们的输出都放在__log_buf这个缓冲内的,在console_init调用时再将这个缓冲区内的数据一次性输出。那么console_init又做了什么工作呢?这个函数体在drivers/char/tty_io.c中:/
2008-05-29 22:51:00 2380
原创 uclinux-2008r1-rc8(bf561)内核的console(1):数据结构
1.1 数据结构内核中与console相关的结构体可以分为通用定义与不同体系结构的定义两部分,通用定义与具体的硬件无关,它只是定义了一类硬件的通用参数与接口,不同的体系结构下还需要加上一些特有的东西。1.1.1 串口通用定义1.1.1.1 uart_ops这个结构体的定义位于include/linux/serial_core.h,它定义了UA
2008-05-29 09:22:00 1716
原创 重读uclinux-2008r1-rc8(bf561)内核的中断处理(4):特定处理函数
1.4 几个特定的中断处理函数1.4.1 handle_simple_irq对于不同中断源的默认处理函数(irq_desc结构体中的handle_irq),内核将之分成了3类。除了PF0-PF47的中断和IRQ_PROG0_INTA、IRQ_PROG1_INTA、IRQ_PROG2_INTA这三个由PF口共享的中断外对于其它的中断源则使用handle_simple_irq进
2008-05-29 01:24:00 1034
原创 重读uclinux-2008r1-rc8(bf561)内核的中断处理(3):中断处理流程
1.3 中断处理流程1.3.1 evt_nmi这个代码是用汇编写的,其实现在arch/blackfin/mach-common/interrupt.s中,用于处理nmi中断:/* Interrupt routine for evt2 (NMI). * We dont actually use this, so just return. * For inner
2008-05-29 01:20:00 1528
原创 重读uclinux-2008r1-rc8(bf561)内核的中断处理(2):中断配置
1.2 中断配置1.2.1 中断入口设置在setup_arch函数的末尾,调用了一个函数进行中断处理函数的配置: init_exception_vectors();这个函数的实现在arch/blackfin/mach-common/ints-priority.c中:void __init init_exception_vectors(void){
2008-05-29 01:12:00 1148
原创 再读uclinux-2008r1-rc8(bf561)内核的中断处理(1):数据结构
1.1 数据结构1.1.1 irq_descuclinux内核为每一个中断设置了一个称为irq_desc的结构体进行描述: /** * struct irq_desc - interrupt descriptor * * @handle_irq: highlevel irq-events handler [if NULL, __do_IRQ
2008-05-28 21:42:00 1050
原创 uclinux-2008r1-rc8(bf561)的中断处理:全文
对这一系列文档做了下整理,调整了一些结构,有需要有朋友请到http://download.csdn.net/source/464473下载(要求CSDN会员)。欢迎大家共同讨论。
2008-05-23 22:10:00 900
原创 U-boot-1.1.6-2008R1到vdsp5(bf561)的移植记录:全文
对前一阵子写的一些文档做了整理,放在 http://download.csdn.net/source/464308有需要的朋友请自行下载(要求CSDN会员)。
2008-05-23 22:02:00 939
原创 uclinux-2008r1-rc8(bf561)的中断处理(11):do_irq
前面提到,当内核发生IVG6-IVG13这8个中断时,最后都会调用do_irq函数进行处理,下面看看这个函数的实现:void do_irq(int vec, struct pt_regs *fp){ if (vec == EVT_IVTMR_P) { vec = IRQ_CORETMR; } else { st
2008-05-22 20:50:00 990
原创 uclinux-2008r1-rc8(bf561)的中断处理(10):ivg_table
为了记录BF561的64个外部中断的状态,内核使用了ivg_table的数组:#define NR_PERI_INTS 64 struct ivgx { /* irq number for request_irq, available in mach-bf533/irq.h */ unsigned int irqno;
2008-05-22 19:14:00 1027
原创 uclinux-2008r1-rc8(bf561)的中断处理(9):irq_chip
内核使用一个称为irq_chip的结构体来描述中断控制器,对中断的操作(启用/禁用某个中断源)将通过irq_chip的回调函数进行,此结构体的定义位于include/linux/irq.h:/** * struct irq_chip - hardware interrupt chip descriptor * * @name: name for /proc/
2008-05-22 18:36:00 2479
原创 uclinux-2008r1-rc8(bf561)的中断处理(8):中断描述
uclinux内核为每一个中断设置了一个称为irq_desc的结构体进行描述: /** * struct irq_desc - interrupt descriptor * * @handle_irq: highlevel irq-events handler [if NULL, __do_IRQ()] * @chip: low lev
2008-05-22 18:34:00 981
原创 uclinux-2008r1-rc8(bf561)的中断处理(7):evt_evt7-13
这7个中断入口的实现都在arch/blackfin/mach-common/interrupt.S中:ENTRY(_evt_evt7) INTERRUPT_ENTRY(EVT_IVG7_P)ENTRY(_evt_evt8) INTERRUPT_ENTRY(EVT_IVG8_P)ENTRY(_evt_evt9) INTERR
2008-05-22 18:31:00 1139
原创 uclinux-2008r1-rc8(bf561)的中断处理(6):__common_int_entry
实际上,uclinux内核对中断6到中断13的处理,都是调用这个函数进行处理的,且在参数中给出中断掩码的位置。这个函数的实现在arch/blackfin/mach-common/interrupt.S中:/* Common interrupt entry code. First we do CLI, then push * RETI, to keep interrupt
2008-05-22 18:28:00 1076
原创 uclinux-2008r1-rc8(bf561)的中断处理(5):evt_timer
这个事件入口在arch/blackfin/mach-common/interrupt.s中实现:/* interrupt routine for core timer - 6 */ENTRY(_evt_timer) TIMER_INTERRUPT_ENTRY(EVT_IVTMR_P)在这里有:/* For timer interrupts, we nee
2008-05-22 18:26:00 1027
原创 uclinux-2008R1-RC8(bf561)到VDSP5的移植(40):中断优先级
在内核中,对64个外部中断的优先级的控制是通过CONFIG_IRQ_*这样的宏来控制的,因此我们需要在config.h中加上对这些宏的定义,60-63这四个中断保留,因而没有定义。// 中断优先级控制 #define CONFIG_IRQ_SPI_ERROR 7#define CONFIG_IRQ_DMA1_ERROR 7#define CONFIG_IRQ_D
2008-05-22 17:50:00 1201
原创 uclinux-2008R1-RC8(bf561)到VDSP5的移植(39):链接重排
在以前的实现中,没有手工对SDRAM分段,当内核小时还没有发现问题,但当内核越来越大时,就开始出现问题了。主要表现为vdsp5在链接时,会自动将一些比较小的变量或者代码段塞到空隙的地方,即使在output_section中加上FORCE_CONTIGUITY也没有效果。比如 ___per_cpu_start = .;
2008-05-21 17:58:00 1418
原创 uclinux-2008R1-RC8(bf561)到VDSP5的移植(38):cache与spinlock
在以前的实现中,直接用adi_acquire_lock来实现spinlock,在没有启用cache的时候,没有任何问题,但是在启用了icache之后,会出现死循环。vdsp5中adi_acquire_lock的实现在ccblkfn.h文件中,如下所示:#pragma inline#pragma always_inlinestatic void adi_acquire
2008-05-21 06:52:00 1400
原创 uclinux-2008r1(bf561)内核中的per_cpu
当内核不需要支持smp的时候,per_cpu是无关紧要的,因为数据只有一份。但是当需要支持smp的时候,per_cpu就显示相当重要了,它可以为每个CPU定义属于自己的专有数据。在kernel/shed.c中有这样一个定义: /* * This is the main, per-CPU runqueue data structure. * * Lockin
2008-05-20 18:29:00 3193 3
原创 uclinux-2008R1-RC8(bf561)到VDSP5的移植(37):_cplb_mgr
在uclinux内核中,提供了一个函数:_cplb_mgr,此函数位于arch/blackfin/kernel/cpu-nompu/cplbmgr.s,它的作用是当bf561发生cplb miss exception的时候替换掉最后的cache范围。在vdsp5中同样提供了一个_cplb_mgr的函数,而且VDSP在默认情况下会使用自己的库中的函数,从而造成内核错误。因此,我们
2008-05-20 11:03:00 1210
原创 uclinux-2008R1-RC8(bf561)到VDSP5的移植(36):__per_cpu_start
在原始文件中,并不支持SMP,因而也就没有per_cpu的问题,但在加上CONFIG_SMP之后,会有如下错误:[Error li1021] The following symbols referenced in processor p0 could not be resolved: __per_cpu_end [___per_cpu_end] re
2008-05-19 12:30:00 1335
原创 uclinux-2008r1(bf561)内核中的EXPORT_SYMBOL
在uclinux内核中,随处可见EXPORT_SYMBOL的定义,它的作用在于为动态插入内核的模块提供一个符号表,使之能调用内核中的函数。因而,如果内核不需要支持insmod,那么自然也就不需要EXPORT_SYMBOL。实际上,在内核没有定义CONFIG_MODULES这个宏的时候,EXPORT_SYMBOL这个宏定义什么也不做:#define EXPORT_SYMBOL(
2008-05-19 12:24:00 1280
原创 uclinux-2008r1(bf561)内核的icache支持(4):换页问题
很明显,在初始化的时候,当SDRAM>32M时,icache是无法覆盖整个存储空间的,此时,uclinux内核必然会发生I-fetch CPLB miss异常。uclinux内核对这种异常情况的处理由_cplb_mgr完成,这个函数在arch/blackfin/kernel/cplb-nompu/cplbmgr.S中,它将在整个存储区域的配置列表中寻找一个合适的块,替换掉ICACHE_
2008-05-16 16:08:00 1231
原创 uclinux-2008r1(bf561)内核的icache支持(3):__fill_code_cplbtab
这个函数的实现为:/* helper function */static void __fill_code_cplbtab(struct cplb_tab *t, int i, u32 a_start, u32 a_end){ if (cplb_data[i].psize) { fill_cplbtab(t,
2008-05-16 16:02:00 1250
原创 uclinux-2008r1(bf561)内核的icache支持(2):icplb_table的生成
icplb_table的生成是由generate_cpl_tables实现的。以下代码删除了与icplb初始化化无关的部分:void __init generate_cpl_tables(void){ u16 i, j, process; u32 a_start, a_end, as, ae, as_1m; struct cplb_t
2008-05-16 14:19:00 1158
原创 uclinux-2008r1(bf561)内核的icache支持(1):寄存器配置初始化
在内核中,如果要支持icache,必须首先定义一个宏:#define CONFIG_BFIN_ICACHE 1对icache的初始化配置在arch/blackfin/kernel/cplb-nompu/cacheinit.c的bfin_icache_init函数完成:#if defined(CONFIG_BFIN_ICACHE)voi
2008-05-16 14:16:00 1223
原创 uclinux-2008R1-RC8(bf561)到VDSP5的移植(35):ARRAY_SIZE
在include/linux/kernel.h中有一个定义:#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))这个宏定义用于取得一个数组中元素的个数,与一般定义不同的是,这个定义加上了+ __must_be_array(arr)这个尾巴,看下它的定义: /*
2008-05-15 15:58:00 1794
原创 uclinux-2008r1-rc8(bf561)的中断处理(4):_evt_ivhw
这部分代码在arch/blackfin/mach-common/interrupt.S中,用于处理Hardware Error Interrupt,VDSP文档对此错误的解释是:The Hardware Error Interrupt is generated by: Bus parity errors Internal error conditions with
2008-05-15 11:19:00 954
原创 uclinux-2008r1-rc8(bf561)的中断处理(3):trap
这部分代码用于处理Exception中断,对于内核而言是相当重要的,其实现在arch/blackfin/mach-common/entry.S文件中。ENTRY(_trap) /* Exception: 4th entry into system event table(supervisor mode)*/ /* Since the kernel stack c
2008-05-14 16:07:00 1001
原创 uclinux-2008r1-rc8(bf561)的中断处理(2):evt_nmi
这个代码是用汇编写的,其实现在arch/blackfin/mach-common/interrupt.s中,用于处理nmi中断:/* Interrupt routine for evt2 (NMI). * We dont actually use this, so just return. * For inner circle type details, please
2008-05-14 16:04:00 925
原创 uclinux-2008r1-rc8(bf561)的中断处理(1):中断入口设置
在setup_arch函数的末尾,调用了一个函数进行中断处理函数的配置: init_exception_vectors();这个函数的实现在arch/blackfin/mach-common/ints-priority.c中:void __init init_exception_vectors(void){ SSYNC();
2008-05-14 16:01:00 938
原创 uclinux-2008R1-RC8(bf561)到VDSP5的移植(34):.rept
在arch/blackfin/mach-common/entry.S中有这样几行: .rept NR_syscalls-(.-_sys_call_table)/4 .long _sys_ni_syscall .endr在这里NR_syscalls的值为#define __NR_syscall 357#defi
2008-05-14 09:09:00 1263
原创 uclinux-2008R1-RC8(bf561)到VDSP5的移植(33):__ebss_l1
在setup_arch函数的末尾,有这样的语句: /* Copy atomic sequences to their fixed location, and sanity check that these locations are the ones that we advertise to userspace. */ memcpy(
2008-05-14 09:05:00 1666
原创 uclinux2.6(bf561)内核中的paging_init
1 参数及变量在bootmem初始化完成之后,setup_arch开始进行下一个初始化工作: /* * get kmalloc into gear */ paging_init();这个函数的实现位于arch/mm/init.c: /* * paging_init() continues the virt
2008-05-12 14:53:00 1888
原创 uclinux2.6(bf561)内核中的current_thread_info
current_thread_info的定义在include/asm/thread_info.h中:/* Given a task stack pointer, you can find its task structure * just by masking it to the 8K boundary. */static inline struct threa
2008-05-12 14:47:00 5021 2
原创 uclinux2.6(bf561)中的bootmem分析(4):alloc_bootmem_pages
这是一个定义好的宏,用于分配内存:#define alloc_bootmem_pages(x) / __alloc_bootmem(x, PAGE_SIZE, __pa(MAX_DMA_ADDRESS))其中MAX_DMA_ADDRESS的定义为:#define MAX_DMA_ADDRESS PAGE_OFFSET而PAGE_OFFSET是定义成0的。
2008-05-09 15:48:00 2015
原创 uclinux2.6(bf561)中的bootmem分析(3):init_bootmem_node
这个函数的实现在mm/bootmem.c中: /* * Called once to set up the allocator itself. */static unsigned long __init init_bootmem_core(pg_data_t *pgdat, unsigned long mapstart, unsigned long
2008-05-09 13:37:00 1840
原创 uclinux2.6(bf561)中的bootmem分析(2):调用前的参数分析
1.1.1 在这几个相关的函数调用中,涉及到了几个参数:l NODE_DATA(0)这个宏的定义在include/linux/mmzone.h中extern struct pglist_data contig_page_data;#define NODE_DATA(nid) (&contig_page_data)就是取一个结构体变量的指针。
2008-05-09 11:35:00 1468
原创 uclinux2.6(bf561)中的bootmem分析(1):猜测
在setup_arch(arch/blackfin/kernel/setup.c)函数中,与bootmem相关的代码有: int bootmap_size;… /* setup memory defaults from the user config */ physical_mem_end = 0; _ramend
2008-05-09 11:27:00 1591 1
Visual EmbedLinux Tools 0.2.9
2016-08-02
Visual EmbedLinux Tools 0.2.8
2016-07-03
Visual EmbedLinux Tools 0.2.7
2016-06-22
Visual EmbedLinux Tools 0.2.6
2016-06-07
Visual EmbedLinux Tools 0.2.5
2016-05-19
Visual EmbedLinux Tools 0.2.4
2016-05-11
Visual EmbedLinux Tools 0.2.3
2016-04-13
Visual EmbedLinux Tools 0.2.1
2015-11-18
Visual EmbedLinux Tools 0.2.0
2015-11-06
Visual EmbedLinux Tools 0.1.7
2015-10-10
python27-ns3
2015-07-07
Visual EmbedLinux Tools 0.1.6
2015-03-29
Visual EmbedLinux Tools-0.1.4
2015-02-06
Visual EmbedLinux Tools-0.1.3
2015-01-25
Visual EmbedLinux Tools-0.1.2
2015-01-13
Visual EmbedLinux Tools-0.1.1
2015-01-03
快乐虾的工具箱0.0.2
2009-09-29
在vs2008下编译uclinux内核:工程文件:vs-fs-1.0
2009-07-13
快乐虾的工具箱 0.0.1
2008-11-21
memsim_csdn_0.1
2008-08-04
bfin-uclinux-2008r1-csdn-2008-08-28.part08
2008-07-28
bfin-uclinux-2008r1-csdn-2008-08-28.part07
2008-07-28
bfin-uclinux-2008r1-csdn-2008-08-28.part06
2008-07-28
bfin-uclinux-2008r1-csdn-2008-08-28.part05
2008-07-28
bfin-uclinux-2008r1-csdn-2008-08-28.part04
2008-07-28
bfin-uclinux-2008r1-csdn-2008-08-28.part03
2008-07-28
bfin-uclinux-2008r1-csdn-2008-08-28.part02
2008-07-28
bfin-uclinux-2008r1-csdn-2008-08-28.part01
2008-07-28
uclinux-2008r1到vdsp5(bf561)的移植记录_v0.1
2008-07-28
uclinux内核的存储管理_v0.2.pdf
2008-06-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人