Linux Kernel
文章平均质量分 91
myspor
专注于嵌入式Linux系统的软件开发与应用。熟悉Android系统。
展开
-
Porting Android to S3C6410
Phases, ü Installing tool chain ü Downloading Linux kernel ü Installing Android Emulator ü Extracting root file system ü Modifying Linux kernel source ü Configuring Linux kernel ü Modifying fil转载 2011-03-26 13:05:00 · 673 阅读 · 0 评论 -
Linux操作系统内核启动参数详细解析
Linux操作系统内核启动参数详细解析 Linux内核在启动的时候,能接收某些命令行选项或启动时参数。当内核不能识别某些硬件进而不能设置硬件参数或者为了避免内核更改某些参数的值,可以通过这种方式手动将这些参数传递给内核。 如果不使用启动管理器,比如直接从BIOS或者把内核文件用“cp zImage /dev/fd0”等方法直接从设备启动,就不能给内核传递参数或选项--这也许是我们使用引导管理器比如LILO的好处之一吧。 Linux的内核参数是以空格分开的一个字符串列表,通常具有如下形式:转载 2011-04-11 17:05:00 · 450 阅读 · 0 评论 -
Arm linux 内核启动流程
Arm linux 内核启动流程 还是从编译链接生成vmlinux的过程来看吧,由一大堆.o文件链接而成,第一个就是 kernel/arch/arm/kernel/head-armv.o ,而且我们还看到了 lds链接文件kernel/arch/arm/vmlinux.lds,先把它分析一下 ENTRY(stext) //入口点是stext 应该就在head-armv.s中了 SECTIONS { . = 0xC0008000; //基址,是内核开始的虚拟地址转载 2011-04-11 17:31:00 · 798 阅读 · 0 评论 -
ARM linux启动的流程
ARM linux启动的流程 首先,porting linux的时候要规划内存影像,如小弟的系统有64m SDRAM, 地址从0x 0800 0000 -0x0bff ffff,32m flash,地址从0x0c00 0000-0x0dff ffff. 规划如下:bootloader, linux kernel, rootdisk放在flash里。 具体从 0x0c00 0000开始的第一个1M放bootloader, 0x0c10 0000开始的2m放linux kernel转载 2011-04-11 17:37:00 · 502 阅读 · 0 评论 -
Linux 嵌入式启动以及优化
Linux 嵌入式启动以及优化 以前写了一篇Linux PC启动过程的日记,最近项目中,想优化一下启动过程,减少启动时间.因此研究了我们项目的启动全过程. 第一步: BootLoader -- U boot 1 在cpu/arm926ejs/start.s中 a) b reset ; //jump to reset b) set cpsr ;svc mode ,disable I,F interrupt c)调用lowlevel_init (在board/xxxx/lo转载 2011-04-11 19:27:00 · 1183 阅读 · 0 评论 -
Linux2.6编译记录
HOST:WinXP VM:6.5 VMOS:Ubuntu 8.04.1TLS 安装VMwareTools后,可以通过共享拷贝文件 拷贝linux-2.6.25.tar.bz2到$HOME $tar xvf linux-2.6.25.tar.bz2 $cd linux-2.6.25 拷贝2.6.25-at91.patch.gz到$HOME/linux-2.6.25 打补丁:AT91SAM9261EK for linux2.6.25 $zcat 2.6.25-at91.patch.gz |转载 2011-04-11 19:33:00 · 8799 阅读 · 0 评论 -
Linux系统中ARM体系的内存分页认识
RK28平台Linux系统中ARM体系的内存分页认识 关键字 ARM,内存管理,分页,MMU,虚拟地址 概 述 Linux系统下ARM芯片内存分页 的一个认知文档, 阅读本文前认为读者了解MMU 目 录 1. 概述... 5 2. LINUX的内存分页管理... 5 3. ARM的分页模式... 5 4. 内存分页相关的数据结构... 5 5. 重要的系统函数调用... 5 6.物理内存的定制... 5 7.虚拟空间到物理空间的映射... 5 8.几个相关问题的转载 2011-04-11 20:42:00 · 10752 阅读 · 0 评论 -
LINUX内核信号量设计与实现
LINUX内核信号量设计与实现 taoistf just for fun taoistf@gmail.com 2008/08/18 一 LINU转载 2011-04-12 10:27:00 · 7662 阅读 · 1 评论 -
对.lds连接脚本文件的分析
对.lds连接脚本文件的分析 对于.lds文件,它定义了整个程序编译之后的连接过程,决定了一个可执行程序的各个段的存储位置。虽然现在我还没怎么用它,但感觉还是挺重要的,有必要了解一下。 先看一下GNU官方网站上对.lds文件形式的完整描述: SECTIONS { ... secname start BLOCK(align) (NOLOAD) : AT ( ldadr ) { contents } >region :phdr =fill ... } secname和contents是必须的,转载 2011-04-11 17:05:00 · 470 阅读 · 0 评论 -
Linux 2.6 内核的嵌入式系统应用
Linux 2.6 内核的嵌入式系统应用 摘 要:在分析Linux2.6内核新特性的基础上,在S3C2410开发板上移植了2.6内核和新的文件系统,并成功地对H.264编解码多媒体系统提供了支持。 关键词:Linux 内核 嵌入式系统 S3C2410转载 2011-04-11 17:08:00 · 541 阅读 · 0 评论 -
linux内核启动流程
linux内核启动流程 Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件,包括内核入口ENTRY(stext)到start_kernel间的初始化代码,主要作用是检查CPU ID, Architecture Type,初始化BSS等操作,并跳到start_kernel函数。在执行前,处理器应满足以下状态: r0 - should be 0 r1 - unique architecture number MMU转载 2011-04-11 17:09:00 · 460 阅读 · 0 评论 -
start_kernel分析
start_kernel分析 如果以为到了c代码可以松一口气的话,就大错特措了,linux的c也不比汇编好懂多少,相反到掩盖了汇编的一些和机器相关的部分,有时候更难懂。其实作为编写操作系统的c代码,只不过是汇编的另一种写法,和机器代码的联系是很紧密的。 start_kernel在 /linux/init/main.c中定义: asmlinkage void __init start_kernel(void) { char * command_line; unsigned long memp转载 2011-04-11 17:10:00 · 582 阅读 · 0 评论 -
bootloader技术内幕
本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― Boot Loader 的概念、软 件设计的主要任务以及结构框架等内容。 一、引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统 从软件的角度看通常可以分为四个层次: 1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。 2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系转载 2011-04-11 17:39:00 · 695 阅读 · 0 评论 -
S3C2410 vivi阅读笔记
S3C2410 vivi阅读笔记 建议读一读《嵌入式系统Boot Loader技术内幕》(詹荣开著),google一下就会找到一片。什么是Bootloader就不再这里废话了,看看上面的文章就明了了。 Bootloader有很多种,如本文将要阅读的vivi,除此之外还有uboot,redboot,lilo等等。Vivi 是韩国mizi公司专门为三星s3c2410芯片设计的Bootloader。 先来看看vivi的源码树: vivi-+-arch-+-s3c2410 |-Documenta转载 2011-04-11 18:31:00 · 866 阅读 · 0 评论 -
start_kernel()函数
Start_kernel()中调用了一系列初始化函数,以完成kernel本身的设置。这些动作有的是公共的,有的则是需要配置的才会执行的。 在start_kernel()函数中, 输出Linux版本信息(printk(linux_banner)) 设置与体系结构相关的环境(setup_arch()) 页表结构初始化(paging_init()) 使用"arch/alpha/kernel/entry.S"中的入口点设置系统自陷入口(trap_init()) 使用alpha_mv结构和en转载 2011-04-11 19:28:00 · 7105 阅读 · 0 评论 -
Linux 内核启动分析
Linux 内核启动分析 1. 内核启动地址 1.1. 名词解释 ZTEXTADDR 解压代码运行的开始地址。没有物理地址和虚拟地址之分,因为此时MMU处于关闭状态。这个地址不一定时RAM的地址,可以是支持读写寻址的flash等存储中介。 Start address of decompressor. here's no point in talking about virtual or physical addresses here, since the MMU will be off at th转载 2011-04-11 19:34:00 · 6626 阅读 · 0 评论 -
ARM-Linux内核启动的分析
1.介绍..........................................................................................2 2.相关定义介绍.......................................................................转载 2011-04-12 10:24:00 · 7682 阅读 · 0 评论 -
Linux 移植流水账
Linux 移植流水账 首先,要看芯片的核Linux是否支持,如果不支持,那么工作量极其大,放弃吧。 如果cpu核linux支持的话,移植linux,主要是根据SOC所集成的外围模块,将驱动完成。 下面以一款ARM926ejs的芯片为例,在linux 26.22.5上的移植 。 假设芯片叫 MYCHIP 第一步 环境的建立 : 1 在config文件中添加你的芯片支持 a) mkdir arch/arm/mach_mychip, 添加Kconfig和Makefile转载 2011-04-11 19:31:00 · 7846 阅读 · 0 评论 -
Linux 2.6.25 内核编译配置选项简介
1.Code maturity level options代码成熟度选项 1.1General setup 常规设置 1.1.1 Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择 1.1.2 Local version - append to kernel release 在内核版本后面加上自定义的版本字符串(小于64字符),可以用"uname -a"命令看到转载 2011-03-26 15:24:00 · 1642 阅读 · 0 评论 -
Linux 开发入门
概 述 本文是linux开发的一个入门文档,介绍了从nfs启动android操作系统的相关步骤。 1. 开发环境 虚拟机:ubuntu8.10 虚拟机IP:172.16.10.73 网关:172.16.10.1 子网掩码:255.255.255.0 广播地址:172.16.1.255 开发板IP:172.16.10.211 广播地址:172.16.10.255 子网掩码 255.255.255.0 建立Linux虚拟机 关键设置:在虚拟机里一定要选上Bridged:connec转载 2011-03-30 17:36:00 · 657 阅读 · 0 评论 -
Linux系统下Ramdisk的制作过程
Linux系统下Ramdisk的制作过程 一、在一个已建好的文件系统上进行修改。 设已建立好的文件系统压缩文件为ramdisk.gz 1.解压 #cd ramdisk.gz所在目录 #gunzip ramdisk.gz 在解压后,得到文件系统镜象文件ramdisk, 覆盖了原来的压缩文件 2.镜象文件挂载 镜象文件必须经过挂载后才能看到文件系统中的各个目录和详细内容 #mkdir /mnt/loop /* /mnt/loop 是文件系统要挂载到的目录 #mount –o loo转载 2011-03-30 20:17:00 · 489 阅读 · 0 评论 -
Kernel硬件中断的初始化流程
Kernel硬件中断的初始化流程 Porting kernel到一个全新的开发板时,通常hardware irq的初始化函数是要我们自己实现的。 那我们实现了自己硬件的中断初始化函数之后,内核是如何调用到它的呢?内核有自己的一套支持多平台的架构。 下面我们分析内核中断初始化的过程以及如何调用到一个新平台的irq初始化函数。 这里我们以s3c2410平台为例,他的中断初始化函数定义在: /* arch/arm/mach-s3c2410/irq.c */ void __init s3c24xx转载 2011-04-08 10:17:00 · 830 阅读 · 0 评论 -
Request_irq和setup_irq的区别
Request_irq和setup_irq的区别 Linux 内核提供了两个注册中断处理函数的接口:setup_irq和request_irq。这两个函数都定义在kernel/irq/manage.c里。 /* * Internal function to register an irqaction - typically used to * allocate special interrupts that are part of the architecture. */ int setup_i转载 2011-04-08 10:29:00 · 446 阅读 · 0 评论 -
内核等待队列机制原理分析
内核等待队列机制原理分析 1. 等待队列数据结构 等待队列由双向链表实现,其元素包括指向进程描述符的指针。每个等待队列都有一个等待队列头(wait queue head),等待队列头是一个类型为wait_queque_head_t的数据结构: struct __wait_queue_head { spinlock_t lock; struct list_head task_list; }; typedef struct __wait_queue_head wait_queue_head_t;转载 2011-04-08 10:39:00 · 712 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs
Linux那些事儿之我是Sysfs "sysfs is a ram-based filesystem initially based on ramfs. It provides a means to export kernel data structures, their attributes, and the linkages between them to userspace.” --- documentation/filesystems/sysfs.txt 可以先把documentation/f转载 2011-04-08 10:59:00 · 778 阅读 · 0 评论 -
udev详解
udev详解 如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略。在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev目录下。后来,采用了devfs,一个基于内核的动态设备文件系统,他首次出现在2.3.46 内核中。Mandrake,Gentoo等Linux分发版本采用了这种方式。devfs创建的设备文件是动态的。但是devfs有一些严重的限制,从 2.6.13版本后移走了。目前取代他的便是文本要提到的udev转载 2011-04-08 10:26:00 · 671 阅读 · 0 评论 -
深入分析request_irq的dev_id参数作用
深入分析request_irq的dev_id参数作用 注:若对kernel中断处理模型不是很清楚的话(如:irqaction的作用)可以先参考一下这篇文档: http://blog.chinaunix.net/u2/60011/showart.php?id=1079281 这里主要讲request_irq的参数dev_id的作用,内容会涉及到少许上面文档提到的内容。 Request_irq的作用是申请使用IRQ并注册中断处理程序。 request_irq()函数的原型如下: /* kerne转载 2011-04-08 10:27:00 · 464 阅读 · 0 评论 -
Linux内核访问外设I/O资源的方式
Linux内核访问外设I/O资源的方式 我们知道默认外设I/O资源是不在Linux内核空间中的(如sram或硬件接口寄存器等),若需要访问该外设I/O资源,必须先将其地址映射到内核空间中来,然后才能在内核空间中访问它。 Linux内核访问外设I/O内存资源的方式有两种:动态映射(ioremap)和静态映射(map_desc)。 一、动态映射(ioremap)方式 动态映射方式是大家使用了比较多的,也比较简单。即直接通过内核提供的ioremap函数动态创建一段外设I/O内存资源到内核虚拟地址的映射表,转载 2011-04-08 10:38:00 · 448 阅读 · 0 评论 -
嵌入式Linux内核时钟初始化问题
嵌入式Linux内核时钟初始化问题 首先搞清楚RTC在kernel内的作用: linux系统有两个时钟:一个是由主板电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟,硬件时钟。当操作系统关机的时候,用这个来记录时间,但是对于运行的系统是不用这个时间的。另一个时间是 “System clock”也叫内核时钟或者软件时钟,是由软件根据时间中断来进行计数的,内核时钟在系统关机的情况下是不存在的,所以,当操作系统启动的时候,内核时钟是要读取RTC时间来进行时间同步。并且在系统关机的时候转载 2011-04-08 10:19:00 · 792 阅读 · 0 评论 -
分析kernel的initcall函数
分析kernel的initcall函数 先来看看这些initcall函数的声明: /* include/linux/init.h */ /* initcalls are now grouped by functionality into separate * subsections. Ordering inside the subsections is determined * by link order. * For backwards compatibility, initcall()转载 2011-04-08 10:23:00 · 507 阅读 · 0 评论 -
Kernel中断处理模型
Kernel中断处理模型 Kernel中断处理模型 内核版本: Linux 2.6.18_pro500 (Montavista) Kernel中断处理模型结构图如下:转载 2011-04-08 10:28:00 · 508 阅读 · 0 评论 -
FAT32文件系统详细介绍
<br />通过使用DiskEditor对硬盘的分析,现对硬盘的MBR区及FAT32文件系统做一个详细的介绍。<br /> <br />新硬盘->低格后 变化:所有扇区中的字节数据填充为0x00<br />低格后->分区后 变化:写硬盘的MBR(主引导扇区)区<br />分区后->格式华 变化:写硬盘的FAT(文件分配表)区<br /> <br />MBR区介绍:<br /> 起始位置:0柱面0磁头1扇区(硬盘的第一个扇区)<br />转载 2011-04-09 09:46:00 · 1656 阅读 · 0 评论 -
linux系统2.6内核编译全过程
linux系统2.6内核编译全过程! 第一项 Code maturity level options (代码成熟度选项) 按enter进入后选项如下 Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.你应该选择它,因为有许多设备可能必需选择这个选项才能进行配置,实际上它是安全的。 Select only drivers expected to com转载 2011-04-11 17:05:00 · 885 阅读 · 0 评论 -
s3c2410 MMU
s3c2410 MMU MMU,全称Memory Manage Unit, 中文名——存储器管理单元。 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多称为覆盖块(overlay)的片转载 2011-04-11 20:40:00 · 5240 阅读 · 0 评论