星期六, 十一月 24, 2007

S3C2410启动信息注释(user_mode部分)『转』

uclinux的启动主要分为两个阶段: 第一部分bootloader启动阶段 第二部分linux 内核初始化和启动阶段 第一节:start_kernel 第二节:用户模式( user_mode )开始,start_kernel结束 第三节:加载linux内核完毕,转入cpu_idle进程

Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039

英国威尔士,斯旺西大学的NET3.039, TCP/IP 协议栈。
此信息,在linux启动过程中都会出现。
Initializing RT netlink socket
BlueZ Core ver 2.4 Copyright (C) 2000,2001 Qualcomm Inc
Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
CPU clock = 202.800000 Mhz, HCLK = 101.400000 Mhz, PCLK = 50.700000 Mhz

对Socket的初始化,socket_init(),Netlink 一种路由器管理协议(linux-2.4.22\net\core\Rtnetlink.c,Routing netlink socket interface: protocol independent part。 其中RT是route路由的意思。这句输出是在create产生rtnetlink的socket套接字时的一个调试输出。)

此信息,在linux启动过程中都会出现。

Initializing S3C2410 buffer pool for DMA workaround

初始化内存池

Starting kswapd

启动交换守护进程kswapd,进程IO操作例程kpiod。

kswapd可以配合kpiod运行。进 程有时候无事可做,当它运行时也不一定需要把其所有的代码和数据都放在内存中。这就意味着我们可以通过把运行中程序不用的内容切换到交换分区来更好的是利 用内存。大约每隔1秒,kswapd醒来并检查内存情况。如果在硬盘的东西要读入内存,或者内存可用空间不足,kpiod就会被调用来做移入/移出操作。 kswapd负责检查,kpiod负责移动。

devfs: v1.10 (20020120) Richard Gooch (rgooch@atnf.csiro.au)
devfs: boot_options: 0x1


Devfs模块的输出信息。设备文件系统devfs,版本1.12c

Samsung S3C2410X (i2c) algorithm module version 2.6.1 (20010830)
iic_s3c2410_init: Samsung S3C2410X iic adapter module version 2.6.1 (20010830)
i2c-dev.o: Registered 'Samsung S3C2410X IIC adapter' as minor 0
s3c2410_init: Initialized IIC on S3C2410X, 386kHz clock
iic_s3c2410_init: initialized iic-bus at 0xf4000000.


I2C

tts/%d0 at I/O 0x50000000 (irq = 52) is a S3C2410
tts/%d1 at I/O 0x50004000 (irq = 55) is a S3C2410
tts/%d2 at I/O 0x50008000 (irq = 58) is a S3C2410

Console: switching to colour frame buffer device 80x60
Installed S3C2410 frame buffer


framebuffer

pty: 256 Unix98 ptys configured

Pty模块的输出信息,与控制台操作有关的设置。
将通过 devpts 文件系统使用 Unix98 PTYs,(Pseudo-ttys (telnet etc) device是伪ttys设备的缩写。
  • ① TTY(/dev/tty)是TeleTYpe的一个老缩写,为用户输入提供不同控制台的设备驱动程序。它的名字来源于实际挂接到 UNIX系统的、被称为电传打字机(teletype)的终端。在Linux下,这些文件提供对虚拟控制台的支持,可以通过按<Alt-F1>到<Alt -F6>键来访问这些虚拟控制台。这些虚拟控制台提供独立的、同时进行的本地登录对话过程
  • ② ttys(/dev/ttys)是计算机终端的串行接口。/dev/ttyS0对应MS-DOS下的 COM1。

使 用 make dev脚本MAKEDEV来建立pty文件。这样系统内核就支持Unix98风格的pty了。在进行Telnet登录时将要用到/dev/pty设备。 pty是伪终端设备,在远程登录等需要以终端方式进行连接,但又并非真实终端的应用程序中必须使用这种设备,如telnet或xterm等程序。 Linux 2.2以后增添了UNIX98风格的Pty设备,它使用一个新的文件系统(devpts针对伪终端的文件系统)和一个克隆的设备cloning device来实现其功能。

linux-2.4.22\drivers\char\Pty.c, 在devfs_mk_dir (NULL, "pts", NULL);时会输出上面的信息。

s3c44b0-kbd initialized
s3c2410-ts initialized
s3c2410-adc initialized
S3C2410 Real Time Clock Driver v0.1

S3C2410键盘、 、ad转换器、实时时钟初始化

block: 128 slots per queue, batch=32
Uniform Multi-Platform E-IDE driver Revision: 6.31
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xxne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com)
Last modified Nov 1, 2000 by Paul Gortmaker

ide块设备驱动

eth0: NE2000 found at 0xd1000200, using IRQ 2.
PPP generic driver version 2.4.1

网卡驱动,基地址为:
0xd1000200,中断号:2

SCSI subsystem driver Revision: 1.00
request_module[scsi_hostadapter]: Root fs not mounted

USB设备信息,USB会被当做SCSI来处理。

UDA1341 audio driver initialized

声卡驱动

NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9D1208V0M)
Find a MTD partition from BONFS -> nandflash0 (bon4)
Creating 1 MTD partitions on "Samsung K9D1208V0M":
0x00430000-0x03f30000 : "nandflash0 (bon4)"
devfs_mk_dir(bon): using old entry in dir: c03650a0 ""
bon0: 00000000-00020000 (00020000) 00000000
bon1: 00020000-00030000 (00010000) 00000000
bon2: 00030000-00130000 (00100000) 00000000
bon3: 00130000-00430000 (00300000) 00000000
bon4: 00430000-03f30000 (03b00000) 00000001
bon5: 03f30000-03ffc000 (000cc000) 00000000


NAND device

flash提供了写BUFFER的命令来加快对flash上块的操作。对Flash擦除和写数据是很慢的。如果用写BUFFER的命令会快一点。据 手册上说,会快20倍。Buffer Size :5 bytes的buffer缓冲不是每个块都有,是整个flash只有一个5 bytes的buffer,用写BUFFER命令对所有的块进行写操作,都要用同一个buffer,写Buffer是主要检查buffer是否 available,其实buffer起缓冲作用,来提高工作效率。

比如某flash有128个128K字节 块。允许用户对任意块进行字节编程和写缓冲器字节编程操作,每字节编程时间为210μs;若采用写缓冲器字节编程方式,32字节编程共需218μs,每字 节编程时间仅为6.8μs。芯片的块擦除时间为1s,允许在编程或块擦除操作的同时进行悬挂中断去进行读操作,待读操作完成后,写入悬挂恢复命令,再继续 编程或块擦除。

此处为重要信息部分,需要特别留意。在内存中映射过的flash,创建三个MTD分区:flash上的内容将被映射到内存中的对应地址
前128K为BootLoader--->0x00000000-0x00020000
接着的128K为系统配置信息Config存放的位置--->0x00020000-0x00040000
再后面的 16M - 2X128K 为romfs的存放处.--->0x00040000-0x01000000
上面的内容,大家可以根据前面的换算公式得到。
A> 编译的bootloader一般大小约50K左右;
B> 在此处就知道了配置信息config是放在第2分区中的;
C> 制作的romfs的大小,一般为8M或10M左右,所以能放得下;

对于linux 的根文件系统,目前有三种块设备的驱动可以选择,它们分别是:

a) Blkmem 驱动
b) MTD 驱动
c) RAM disk 驱动

Blkmem 驱动是专门为uclinux 开发的一种块设备驱动,它是uclinux系统中最为古老和通用的块设备驱动。它原理相对简单但是配置比较复杂,需要根据你即的Flash的分区使用情况 来修改代码。当然修改的结果是它可以对一些NOR型的Flash进行读写操作。不过目前支持的Flash类型不够多。如果新加入对一种Flash的支持需 要作的工作量比较大。

Linux的MTD驱动是标准Linux的Flash驱动。它支持大量的设备, 有足够的功能来定义Flash的分区,进行地址映射等等。使用MTD你可以在一个系统中使用不同类型的Flash。它可以将不同的Flash组合成一个线 性的地址让你来使用。在标准的Linux 2.4内核中MTD有一系列的选项,你可以根据个人系统的需要来选择,定制。

另 外一种选择就是RAM disk 驱动。在PC上它经常用于没有硬盘的Linux的启动过程。它和Flash没有直接的关系。不过当Flash上启动的是经过压缩的内核时。RAM disk 可以作为根文件系统。MTD 驱动提供了对Flash强大的支持,你通过它甚至可以在Flash上运行一个可以读写的真正的文件系统,比如JFFS2。而Blkmem驱动则望尘莫及

usb.c: registered new driver usbdevfs
usb.c: registered new driver hub
usb-ohci.c: USB OHCI at membase 0xe9000000, IRQ 26
usb.c: new USB bus registered, assigned bus number 1
hub.c: USB hub found
port #1 suspened!
port #0 alived!
hub.c: 1 port detected
Initializing USB Mass Storage driver...
usb.c: registered new driver usb-storage
USB Mass Storage support registered.

USB信息


NET4: Linux TCP/IP 1.0 for NET4.0

调用inet_init [ linux-2.4.22\net\ipv4\Af_inet.c ]时的输出信息, 在启动过程中被socket.c调用到。
IP Protocols: ICMP, UDP, TCP, IGMP

列出可以支持的IP协议,此处为kernel源代码inet_add_protocol(p);的输出。在linux启动过程中,都会看到这句的输出。

IP: routing cache hash table of 512 buckets, 4Kbytes

IP路由代码的输出信息。

ip_rt_init [ linux-2.4.22\net\ipv4\Route.c ],设置 IP module,路由缓冲hash表

TCP: Hash tables configured (established 4096 bind 4096)

TCP协议初始化输出信息。tcp_init [ linux-2.4.22\net\ipv4\Tcp.c ]

NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.

UNIX网络协议信息。

af_unix_init[ linux-2.4.22\net\unix\Af_unix.c ], 多种连接的一种(IPv4, UNIX domain sockets, IPv6和IrDA). SMP 对称多处理器—Symmetrical Multi Processing,这里主要是指UNIX的一些网络协议。

上面的关于网络的输出信息是在linux启动信息中都会出现的。

NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com



VFS: Mounted root (cramfs filesystem).

虚拟文件系统VFS(Virtual Filesystem Switch)的输出信息。

再次强调一下 一个概念。VFS 是一种软件机制,也可称它为 Linux 的文件系统管理者,它是用来管理实际文件系统的挂载点,目的是为了能支持多种文件系统。kernel会先在内存中建立一颗 VFS 目录树,是内存中的一个数据对象,然后在其下挂载rootfs文件系统,还可以挂载其他类型的文件系统到某个子目录上。


Mounted devfs on /dev

加载devfs设备管理文件系统到dev安装点上。/dev是我们经常会用到的一个目录。在2.4的kernel中才有使用到。每次启动时内核会自动挂载devfs。

devfs 提供了访问内核设备的命名空间。它并不是建立或更改设备节点,devfs只是为你的特别文件系统进行维护。一般我们可以手工mknod创件设备节点。 /dev目录最初是空的,里面特定的文件是在系统启动时、或是加载模组后驱动程序载入时建立的。当模组和驱动程序卸载时,文件就消失了。


Freeing init memory: 68K

释放1号用户进程init所占用的内存。

yaffs: dev is 7937 name is "1f:01"
mount: Mounting ramfs on /root failed: No such file or directory


VFS

cramfs 是 Linus Torvalds 本人开发的一个适用于嵌入式系统的小文件系统。由于它是只读的,所以,虽然它采取了 zlib 做压缩,但是它还是可以做到高效的随机读取。 cramfs 不会影响系统读取文件的速度,又是一个高度压缩的文件系统。

我们制作image文件之后,我们还要考虑怎样才能在系统运行的时候,把这个 image 文件 mount 上来,成为一个可用的文件系统。由于这个 image 文件不是一个通常意义上的 block 设备,我们必须采用 loopback 设备来完成这一任务,如:
mount -o loop -t cramfs /usr.img /usr

这样,就可以经由 loopback 设备,把 usr.img 这个 cramfs 的 image 文件 mount 到 /usr 目录上去了。内核中需要对loopback这个设备的支持。
cramfs 的压缩效率一般都能达到将近 50%。
Cramfs通过优化索引节点表的尺寸和除去传统文件系统中文件之间的空间浪费来达到节约空间的目的。它还使用了zlib压缩,实现优于2:1的压缩比例。解压缩过程的系统开销并不是很大,因为Cramfs支持指定单块的解压,而并不必解压缩整个文件。
Cramfs不仅能节省空间,还能避免非正常关机导致的等待fsck或手工进行fsck的麻烦。它通过只读的方式达到这一目的。

BusyBox v1.00 (2005.01.20-11:59+0000) Built-in shell (ash)

BusyBox

Enter 'help' for a list of built-in commands.

help

runing /etc/profile ok
[/mnt/yaffs]


OK

0 意見: