文档库 最新最全的文档下载
当前位置:文档库 › 烧写内核代码及tftp及bootfs的挂载

烧写内核代码及tftp及bootfs的挂载

烧写内核代码及tftp及bootfs的挂载
烧写内核代码及tftp及bootfs的挂载

Fedora14下烧写uboot到sd卡,烧写内核代码到nangflash ,挂载ntfs文件系统到s5pv210

前几天在老师的指导下完成了s5pv210的u-boot及内核代码的烧写和挂载netfs文件系统,今天抽时间再总结一下,主要是对中间出现的问题及解决方案。希望对有需要的人有所帮助。环境:fedora 14 s5pv210开发板vwarm9.0

需要准备的:

uImage 、tiny210v2-uboot.bin 、rootfs_qtopia_qt4.img

一.首先先把u-boot 烧到sd卡里面

代码:

dd iflag= dsync oflag=dsync if= tiny210v2-uboot.bin of=/dev/sdb seek=1

说明:

这一步比较简单,没什么问题烧写完毕后,开发板上电,以root权限进入minicom

进入u-boot 界面。

二、准备烧写内核代码

1、配置TFTP服务器

为了安装TFTp服务器及客户端,需要连接网络,为方便起见,本人建议,开启虚拟机之前首先调节网络模式为NET模式,这样主机只要能连上网,虚拟机就能上网,可以通过YUN 工具进行TFTP服务器的安装

代码:

#yum install tftp-server //安装TFTP服务器

# yum install –y tftp //安装TFTP客户端–y 参数表示同意下载

配置TFTP环境

创建共享目录:#mkdir /var/lib/tftpboot

打开修改配置文件:#vim /etc/xinetd.d/tftp

修改如下:server-args = -s /var/lib/tftpboot –c

启动TFTP服务器:#service xinetd restart

测试是否启动TFTP服务器:# netstat –a | grep tftp

如果没有打开:#chkconfig tftp on

# /etc/init.d /xinetd restart

关闭防火墙:

Setup 进入设置(这里不在多说)

注意:接下来虚拟机下必须设置网络模式为桥接模式(烧写uImage时候的网络模式),我曾经试过在NET模式下和HOST-ONLY模式都没有成功。这里关系到设置TFTP服务器的ip 地址。

进入u-boot 模式设置服务器ip地址及开发板的ip 地址

代码:1, set serverip 192.168.0.10

2, set ipaddr 192.168.0.20

保证服务器的ip地址与开发板的ip地址在同一个网段

其他的不需要设定

3,saveenv(保存)

4,u-boot对nandflash 的操作指令

擦除整个nandflash:nand erase.chip

向地址为21000000 开始拷贝0x400个字节到nandflash的起始位置0

5,内核映像文件uImage

将uImage 文件放在共享目录下/var/lib/tftpboot 在u-boot模式下用tftp命令下载uImage 到开发板

代码:tftp 21000000 uImage

nand erase.chip

nand write 21000000 600000 500000

setenv bootcmd nand read 20008000 600000 500000\;bootm 20008000

saneenv

6,重新启动,在minicom中可以看到内核启动的信息

注意:

按照以上的虚拟机配置,在命令终端进入root用户设置eth0的ip地址

# ifconfig eth0 192.168.0.10

#service network restart

注意:

如果这个时候etho起不开并且报错为:弹出界面eth0:错误:激活连接失败:device not managed by NetworkManager

解决方法:关闭NetworkManager即可

命令:service NetworkManager stop

为了防止下次启动时,该服务重新启动,解决方法:

chkconfig NetworkManager off

再重启网卡,就可以了

最后一步:安装NFS服务

宿主机启动NFS共享服务需要执行以下三个步骤,分别是:

1)设置共享目录和存取权限

在PC宿主机的终端下,打开/etc/exports文件:

# gedit /etc/exports

在里面添加如下内容:

/var/lib/tftpboot *(rw,sync,no_root_squash)

其中“/var/lib/tftpboot”是PC宿主机端的共享目录、“rw”表示读写权限、“sync”表示数据同步写入内存和硬盘、“no_root_squash”表示允许其他机器以root权限执行、存取NFS共享目录里的内容。

1)打开NFS服务器功能

在终端下执行以下指令打开NFS服务功能:

# /etc/rc.d/init.d/nfs start

通常在执行完开启NFS服务的操作后再进行一次NFS重新启动的操作,执行如下指令:

# /etc/rc.d/init.d/nfs restart

在PC宿主机上设置好NFS共享目录后,最好先在PC宿主机上进行NFS服务器的回环测试,验证共享目录是否能够被访问,执行如下指令:

mount –t nfs 192.168.0.10:/var/lib/tftpboot /mnt –o nolock

这里192.192.192.105是PC宿主机的IP地址,如果验证没有问题的话就会在PC 宿主机/mnt目录下看到共享目录/var/lib/tftpboot里面的内容。

配置根文件系统

根文件系统有两个选择:

带QT的:rootfs_qtopia_qt4-20130222.tar.gz(选这个)

不带QT的:rootfs_rtm_210.tgz

将任一一个解压到/var/lib/tftpboot目录内,重新启动开发板,进入u-boot,配置如下信息:

setenv bootargs noinitrd root=/dev/nfs rw nfsroot=192.168.0.10:/var/lib/tftpboot ip=192.168.0.20:192.168.0.10:192.168.0.100:255.255.255.0:arm:eth0:off

console=ttySAC0,115200

saveenv

经过以上操作,开发板启动后加载内核,并以NFS的方式挂载PC主机的根文件系统。

补充说明:

1,在最后一步挂载nfs文件是会出现很多问题比

如说权限不够。。。。当你chmod 777

/var/lib/tftpboot之后还是报权限的错误

不用考虑,只需要关闭selinux 即可,指令如

#vim /etc/sysconfig/selinux 设定selinux = 0;

2,当非常退出minicom 时只需要删除

/var/lock 下的LOCK*即可(不要删错了,删除

就要重新安装mincom,得不偿失)

以上便是这两天从烧写u-boot到sd卡再到烧写内核代码到nand flash 及最后通过NFS挂载bootfs整个过程,希望对大家有所帮助。

利用tftp导入ios

通过concle口登录路由器,设置tftp的环境 rommon 1 >IP_ADDRESS=192.168.1.2 //默认为路由器第一个以太网接口的ip rommon 2 >IP_SUBNET_MASK=255.255.255.0 //设置路由器以太网接口的子网掩码rommon 3 >DEFAULT_GATEWAY=192.168.1.1 //设置网关,否则tftp无法成功rommon 4 >TFTP_SERVER=192.168.1.104 //设置笔记本ip,即为tftp server的ip rommon 5 >TFTP_FILE=c2600-i-mz.123-6c.bin //设置路由器要下载的ios文件名rommon 6 > set //设置tftp完环境后,可以用set命令再检查一下,也可以略过 PS1=rommon ! > RET_2_RTS= IP_ADDRESS=192.168.1.2 IP_SUBNET_MASK=255.255.255.0 DEFAULT_GATEWAY=192.168.1.1 TFTP_SERVER=192.168.1.104 TFTP_FILE=c2600-i-mz.123-6c.bin rommon 7 > tftpdnld //核对无误后,开始tftp IP_ADDRESS: 192.168.1.2

IP_SUBNET_MASK: 255.255.255.0 DEFAULT_GATEWAY: 192.168.1.1 TFTP_SERVER: 192.168.1.104 TFTP_FILE:c2600-i-mz.123-6c.bin Invoke this command for disaster recovery only. WARNING: all existing # in all partitions on flash will be lost! Do you wish to continue? y/n: [n]: y Receiving c2600-c-mz.121-9.bin from 192.168.1.104 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! File reception completed. Copying file c2600-c-mz.121-9.bin to flash.

PCI内核源代码说明

PCI从设备代码说明: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity pcislave is port( //PCI接口说明 //CLK:33M PCI 时钟; //RST : PCI 复位,低有效; // IDSEL : PCI 配置空间选择,高有效; // FRAME :PCI 祯周期开始,低有效; // IRDY : PCI主设备准备好,低有效; clk,rst,idsel,frame,irdy : in std_logic; // TRDY : PCI目标设备准备好,低有效; // DEVSEL :PCI目标设备选择,低有效; // STOP : PCI目标设备停止,低有效; trdy,devsel,stop : inout std_logic; // PCI 效验输出使能,高有效; paren1 : out std_logic; // DATA RD OUT :局部总线读输出信号,高有效; // DATA WR :局部总线写输出信号,高有效; // DMASEL :DMA允许,高有效; data_rd_out,data_wr,dmasel : out std_logic; // IOSEL : IO空间选择输出,高有效; // MEMSEL :内存空间选择输出,高有效; iosel,memsel : buffer std_logic; // EXT ADD :局部总线地址译码输出,IO空间只用(7 到0) ext_add : out std_logic_vector(21 downto 0); // CBE :PCI命令及字节输入 cbe : in std_logic_vector(3 downto 0); // AD : PCI地址及数据复用信号 ad : inout std_logic_vector(31 downto 0)); end pcislave; architecture beha of pcislave is // 目标读状态机 type slaverdst is (idle1,dev_st1,rdst1,rdst2,rdst3,rdst4,rdstopst,ctst1); //目标写状态机 type slavewrst is (idle2,dev_st2,wrst1,wrst2,wrst3,wrst4,wrstopst,ctst2); signal pre_state1,nxt_state1 : slaverdst; signal pre_state2,nxt_state2 : slavewrst; // PCI配置空间定义: // PCI ID号定义 constant id : std_logic_vector(31 downto 0) :="01000010010110000001000100000000"; // PCI 设备类型定义 constant clss : std_logic_vector(31 downto 0) :="00000100000000000000000000000000";

如何安装Linux内核源代码

如何获取Linux内核源代码 下载Linux内核当然要去官方网站了,网站提供了两种文件下载,一种是完整的Linux 内核,另一种是内核增量补丁,它们都是tar归档压缩包。除非你有特别的原因需要使用旧版本的Linux内核,否则你应该总是升级到最新版本。 使用Git 由Linus领头的内核开发队伍从几年前就开始使用Git版本控制系统管理Linux内核了(参考阅读:什么是Git?),而Git项目本身也是由Linus创建的,它和传统的CVS不一样,Git是分布式的,因此它的用法和工作流程很多开发人员可能会感到很陌生,但我强烈建议使用Git下载和管理Linux内核源代码。 你可以使用下面的Git命令获取Linus内核代码树的最新“推送”版本: $ git clone git://https://www.wendangku.net/doc/6615146455.html,/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 然后使用下面的命令将你的代码树与Linus的代码树最新状态同步: $ git pull 安装内核源代码 内核包有GNU zip(gzip)和bzip2格式。Bzip2是默认和首选格式,因为它的压缩比通常比gzip更好,bzip2格式的Linux内核包一般采用linux-x.y.z.tar.bz2形式的文件名,这里的x.y.z是内核源代码的具体版本号,下载到源代码包后,解压和抽取就很简单了,如果你下载的是bzip2包,运行: $ tar xvjf linux-x.y.z.tar.bz2 如果你下载的是gzip包,则运行: $ tar xvzf linux-x.y.z.tar.gz 无论执行上面哪一个命令,最后都会将源代码解压和抽取到linux-x.y.z目录下,如果你使用Git下载和管理内核源代码,你不需要下载tar包,只需要运行git clone命令,它就会自动下载和解压。 内核源代码通常都会安装到/usr/src/linux下,但在开发的时候最好不要使用这个源代码树,因为针对你的C库编译的内核版本通常也链接到这里的。 应用补丁

Linux操作系统源代码详细分析

linux源代码分析:Linux操作系统源代码详细分析 疯狂代码 https://www.wendangku.net/doc/6615146455.html,/ ?:http:/https://www.wendangku.net/doc/6615146455.html,/Linux/Article28378.html 内容介绍: Linux 拥有现代操作系统所有功能如真正抢先式多任务处理、支持多用户内存保护虚拟内存支持SMP、UP符合POSIX标准联网、图形用户接口和桌面环境具有快速性、稳定性等特点本书通过分析Linux内核源代码充分揭示了Linux作为操作系统内核是如何完成保证系统正常运行、协调多个并发进程、管理内存等工作现实中能让人自由获取系统源代码并不多通过本书学习将大大有助于读者编写自己新 第部分 Linux 内核源代码 arch/i386/kernel/entry.S 2 arch/i386/kernel/init_task.c 8 arch/i386/kernel/irq.c 8 arch/i386/kernel/irq.h 19 arch/i386/kernel/process.c 22 arch/i386/kernel/signal.c 30 arch/i386/kernel/smp.c 38 arch/i386/kernel/time.c 58 arch/i386/kernel/traps.c 65 arch/i386/lib/delay.c 73 arch/i386/mm/fault.c 74 arch/i386/mm/init.c 76 fs/binfmt-elf.c 82 fs/binfmt_java.c 96 fs/exec.c 98 /asm-generic/smplock.h 107 /asm-i386/atomic.h 108 /asm- i386/current.h 109 /asm-i386/dma.h 109 /asm-i386/elf.h 113 /asm-i386/hardirq.h 114 /asm- i386/page.h 114 /asm-i386/pgtable.h 115 /asm-i386/ptrace.h 122 /asm-i386/semaphore.h 123 /asm-i386/shmparam.h 124 /asm-i386/sigcontext.h 125 /asm-i386/siginfo.h 125 /asm-i386/signal.h 127 /asm-i386/smp.h 130 /asm-i386/softirq.h 132 /asm-i386/spinlock.h 133 /asm-i386/system.h 137 /asm-i386/uaccess.h 139 //binfmts.h 146 //capability.h 147 /linux/elf.h 150 /linux/elfcore.h 156 /linux/errupt.h 157 /linux/kernel.h 158 /linux/kernel_stat.h 159 /linux/limits.h 160 /linux/mm.h 160 /linux/module.h 164 /linux/msg.h 168 /linux/personality.h 169 /linux/reboot.h 169 /linux/resource.h 170 /linux/sched.h 171 /linux/sem.h 179 /linux/shm.h 180 /linux/signal.h 181 /linux/slab.h 184 /linux/smp.h 184 /linux/smp_lock.h 185 /linux/swap.h 185 /linux/swapctl.h 187 /linux/sysctl.h 188 /linux/tasks.h 194 /linux/time.h 194 /linux/timer.h 195 /linux/times.h 196 /linux/tqueue.h 196 /linux/wait.h 198 init/.c 198 init/version.c 212 ipc/msg.c 213 ipc/sem.c 218 ipc/shm.c 227 ipc/util.c 236 kernel/capability.c 237 kernel/dma.c 240 kernel/exec_do.c 241 kernel/exit.c 242 kernel/fork.c 248 kernel/info.c 255 kernel/itimer.c 255 kernel/kmod.c 257 kernel/module.c 259 kernel/panic.c 270 kernel/prk.c 271 kernel/sched.c 275 kernel/signal.c 295 kernel/softirq.c 307 kernel/sys.c 307 kernel/sysctl.c 318 kernel/time.c 330 mm/memory.c 335 mm/mlock.c 345 mm/mmap.c 348 mm/mprotect.c 358 mm/mremap.c 361 mm/page_alloc.c 363 mm/page_io.c 368 mm/slab.c 372 mm/swap.c 394 mm/swap_state.c 395 mm/swapfile.c 398 mm/vmalloc.c 406 mm/vmscan.c 409

Tftpd32使用说明

平时我们传送文件时,往往是通过FTP、邮箱或是QQ等。但事实上,我们并非整天在传送文件,因而架个FTP服务器有点小题大做了,而用QQ传送又经常会受防火墙的制约,至于邮箱,附件大小就那么点,常常不够用,这时我们可以尝试另一种传送方式——Tftp。 Tftp全称为Trivial File Transfer Protocol,中文名叫简单文件传输协议。大家可以从它的名称上看出,它适合传送“简单”的文件。与FTP不同的是,它使用的是UDP的69端口,因此它可以穿越许多防火墙,不过它也有缺点,比如传送不可靠、没有密码验证等。虽然如此,它还是非常适合传送小型文件的。通过Ttfp传送文件时,需要设置和定制服务端及客户端。比如我想从朋友的机器上下载文件,那就需要先把他的机器做成Tftp服务器,然后用我机器的客户端进行下载。Windows 2000之后的操作系统自带有客户端,所以整个传送过程,事实上忙的是对方! 下面我以从朋友机器上下载一些图片为例来说明一下Tftp的使用过程。 1.设置TFTP服务器 将朋友的机器设置为TFTP服务器。首先叫你的朋友把Tftpd32下载下来并解压(他可能很郁闷哦),然后打开Tftpd32(如图1),这时你朋友的机器就是一个Tftp服务器了。软件默认Tftpd32的保存目录即为下载目录,换句话说,你要下载的文件需要放在Ttfpd32服务器的保存目录下才能被客户端下载。更改Tftpd32下载目录的操作方法为:点击右上角的“Browse”,然后选择要下载的文件的保存目录。不过经此设置后,以后你要想从你朋友机器上下载文件,就要让他先把文件放在更改后的下载目录里,而不是Tftpd32的保存目录了。如果你朋友搞不清当前下载目录下到底有哪些文件,可以让他点击右上角的“Show Dir”进行查看(如图2)。 提示: a.要进行更人性化的设置,如下载的人数、下载端口等,可以点击

linux内核IMQ源码实现分析

本文档的Copyleft归wwwlkk所有,使用GPL发布,可以自由拷贝、转载,转载时请保持文档的完整性,严禁用于任何商业用途。 E-mail: wwwlkk@https://www.wendangku.net/doc/6615146455.html, 来源: https://www.wendangku.net/doc/6615146455.html,/?business&aid=6&un=wwwlkk#7 linux2.6.35内核IMQ源码实现分析 (1)数据包截留并重新注入协议栈技术 (1) (2)及时处理数据包技术 (2) (3)IMQ设备数据包重新注入协议栈流程 (4) (4)IMQ截留数据包流程 (4) (5)IMQ在软中断中及时将数据包重新注入协议栈 (7) (6)结束语 (9) 前言:IMQ用于入口流量整形和全局的流量控制,IMQ的配置是很简单的,但很少人分析过IMQ的内核实现,网络上也没有IMQ的源码分析文档,为了搞清楚IMQ的性能,稳定性,以及借鉴IMQ的技术,本文分析了IMQ的内核实现机制。 首先揭示IMQ的核心技术: 1.如何从协议栈中截留数据包,并能把数据包重新注入协议栈。 2.如何做到及时的将数据包重新注入协议栈。 实际上linux的标准内核已经解决了以上2个技术难点,第1个技术可以在NF_QUEUE机制中看到,第二个技术可以在发包软中断中看到。下面先介绍这2个技术。 (1)数据包截留并重新注入协议栈技术

(2)及时处理数据包技术 QoS有个技术难点:将数据包入队,然后发送队列中合适的数据包,那么如何做到队列中的数

激活状态的队列是否能保证队列中的数据包被及时的发送吗?接下来看一下,激活状态的队列的 证了数据包会被及时的发送。 这是linux内核发送软中断的机制,IMQ就是利用了这个机制,不同点在于:正常的发送队列是将数据包发送给网卡驱动,而IMQ队列是将数据包发送给okfn函数。

用tftp连接主机和开发板的学习过程

用tftp连接主机和开发板的学习过程 交叉编译环境建立好了,总要琢磨着干点更好玩的吧,下一个目标就是要能把交叉编译成功的例子下载到学习板上来看看运行效果了。 1. 用minicom连接串口: fc12上默认是没有安装minicom的,yum安装一个很简单的了。 $ yum install minicom 这样minicom就安装成功了。 运行: $ minicom -s 出现如下界面: +-----[configuration]------+ | Filenames and paths | | File transfer protocols | | Serial port setup | | Modem and dialing | | Screen and keyboard | | Save setup as dfl | | Save setup as.. | | Exit | | Exit from Minicom | +--------------------------+ 向下移动光标到Serial port setup 上,回车,进入Serial port setup 配置界面,如下: +-----------------------------------------------------------------------+ | A - Serial Device : /dev/ttyUSB0 | | B - Lockfile Location : /var/lock | | C - Callin Program : | | D - Callout Program : | | E - Bps/Par/Bits : 115200 8N1 | | F - Hardware Flow Control : No | | G - Software Flow Control : No| | | | Change which setting? | +-----------------------------------------------------------------------+ 配置完成以后直接保存退出就ok了。 以上由于我是用usb转串口的,所以,需要写成这样“A -Serial Device : /d ev/ttyUSB0“。 然后直接输入:

读Linux内核源代码

Linux内核分析方法 Linux的最大的好处之一就是它的源码公开。同时,公开的核心源码也吸引着无数的电脑爱好者和程序员;他们把解读和分析Linux的核心源码作为自己的最大兴趣,把修改Linux源码和改造Linux系统作为自己对计算机技术追求的最大目标。 Linux内核源码是很具吸引力的,特别是当你弄懂了一个分析了好久都没搞懂的问题;或者是被你修改过了的内核,顺利通过编译,一切运行正常的时候。那种成就感真是油然而生!而且,对内核的分析,除了出自对技术的狂热追求之外,这种令人生畏的劳动所带来的回报也是非常令人着迷的,这也正是它拥有众多追随者的主要原因: ?首先,你可以从中学到很多的计算机的底层知识,如后面将讲到的系统的引导和硬件提供的中断机制等;其它,象虚拟存储的实现机制,多任务机制,系统保护机制等等,这些都是非都源码不能体会的。 ?同时,你还将从操作系统的整体结构中,体会整体设计在软件设计中的份量和作用,以及一些宏观设计的方法和技巧:Linux的内核为上层应用提供一个与具体硬件不相关的平台; 同时在内核内部,它又把代码分为与体系结构和硬件相关的部分,和可移植的部分;再例如,Linux虽然不是微内核的,但他把大部分的设备驱动处理成相对独立的内核模块,这样减小了内核运行的开销,增强了内核代码的模块独立性。 ?而且你还能从对内核源码的分析中,体会到它在解决某个具体细节问题时,方法的巧妙:如后面将分析到了的Linux通过Botoom_half机制来加快系统对中断的处理。 ?最重要的是:在源码的分析过程中,你将会被一点一点地、潜移默化地专业化。一个专业的程序员,总是把代码的清晰性,兼容性,可移植性放在很重要的位置。他们总是通过定义大量的宏,来增强代码的清晰度和可读性,而又不增加编译后的代码长度和代码的运行效率; 他们总是在编码的同时,就考虑到了以后的代码维护和升级。甚至,只要分析百分之一的代码后,你就会深刻地体会到,什么样的代码才是一个专业的程序员写的,什么样的代码是一个业余爱好者写的。而这一点是任何没有真正分析过标准代码的人都无法体会到的。 然而,由于内核代码的冗长,和内核体系结构的庞杂,所以分析内核也是一个很艰难,很需要毅力的事;在缺乏指导和交流的情况下,尤其如此。只有方法正确,才能事半功倍。正是基于这种考虑,作者希望通过此文能给大家一些借鉴和启迪。 由于本人所进行的分析都是基于2.2.5版本的内核;所以,如果没有特别说明,以下分析都是基于i386单处理器的2.2.5版本的Linux内核。所有源文件均是相对于目录/usr/src/linux的。 方法之一:从何入手 要分析Linux内核源码,首先必须找到各个模块的位置,也即要弄懂源码的文件组织形式。虽然对于有经验的高手而言,这个不是很难;但对于很多初级的Linux爱好者,和那些对源码分析很

Linux源代码下载

1. 课程设计题目:下载某个版本的linux源代码,生成一个定制的linux操作系统,完成后该系统可以用来作为启动系统使用。 2.如何做的问题? 内核版本要编译一个最新的内核,您需要首先下载它的源代码在您下载内核的源代码前,您要知道到您要找什么。首先要问您自己的问题是-- 您需要一份稳定的还是测试版的内核?稳定版内核通常版本号第二位用偶数数字 -- 例如, 2.0.38、2.2.15、2.2.1 8 和2.4.1 是被认为是“稳定”的内核(分别由于其包含 0、2、2 和4)。如果您想尝试测试版内核,您通常需要找那些版本号第二位是奇数的号码又最高的内核。例如,2.3.99 和 2.1.38都是测试版内核(分别由于其包含 3 和 1)。 内核版本历史 2.2 系列的内核被认为是较新而且稳定的内核。如果"较新"和"稳定"是您想要的,查找一个版本号的第三位是最高的2.2 内核(2.2.16 是目前最新的版本)。当 2.2 系列的内核仍在开发中,2.3 系列已经开始了。这个系列是作为将被集成到 2.4稳定版系列的新功能和高级功能的测试版。2.3 系列已经到了 2.3.99,其开发已经停止。开发人员已经开始着手2.4.0。如果您喜欢冒险使用最最新的技术,您可能想使用可以找到的最新的 2.4 系列内核。

2.4 版内核警告信息 Once a real 2.4 series kernel comes out(like 2.4.0), don't assume that the kernel is ready for use on a mission-critical system like a server. Even though 2.4 is supposed tobe a stable series, early 2.4 kernels ar e likely to be not quite up tosnuff. As is often the case i n the computer industry, the first version o f anythin g can have fairly sizable bugs. While this may not be a problem i f you're testing the kernel on your home workstation, it is a risk you may want to avoid when you machine provides val uable services to others. 下载内核 如果您只是想编译一个您已安装内核的新版本(例如,实现 SMP 支持),那不需要下载任何代码 -- 跳过此部分继续下一屏。 您可以在https://www.wendangku.net/doc/6615146455.html,/pub/linux/kernel上找到内核代码。当您进入到那后,您将发现内核的源代码按内核版本(v2.2、v 2.3等),被组织到多个不同的目录中。在每个目录中,您将发现文件被冠以"linux-x.y.z.tar.gz"和"linux-x.y.z.tar.bz2"。这些就是Linux 内核的源代码。您也将看到冠以 "patch-x.y.z.gz" 和"pa tch-x.y.z.bz2"的文件。这些是用来更新前面完整的内核源代码的补丁包。如果您希望编译一个新的内核版本,您将需要下载这些"linu x"文件其中之一。

cisco tftp 操作

cisco tftp操作 2007-10-12 09:16 1,在Windows*作系统的计算机上安装Cisco TFTP Server软件(文件名为TFTPServer1-1-980730.exe); 2,用Winzip软件将c2500-i-l.113-6.zip文件进行解压,解压后的文件名为c2500-i-l.113-6.bin,将此文件拷入硬盘中一子目录,如D:\cisco。 3,启动Cisco TFTP Server软件; 4,在TFTPServer软件界面上选择“View”――“Options”,在Options界面上,在“TFTP Server root”选项上选择“Browse”,将该目录指向c2500-i-l.113-6.bin 文件所在的目录,如D:\cisco或其它。 5,进入要升级的路由器下,将以太网的地址配置成与安装TFTP软件的计算机在同一个网段,并能ping通该计算机(其实也可以不在同一网段,只要能保证能ping通即可)。 6,在路由器特权状态下(如Router#下),键入Copy tftp flash系统提示:Address or name of remote host [ ]?时键入TFTP软件所在机器IP地址。 系统提示:Sourcefilename[]?时键入要升级的IOS软件文件名,在例中为 c2500-i-l(此处为字母l,不是数字1).11(这两个是数字1,不是字母l)3-6.bin(注意.Bin不能丢)。 系统提示Destination filename [ ]?时,直接回车即可,表示和源文件名一致。 后面还有其它提问,按提示*作即可(如还有提示删除以前的IOS文件,以及确认消息等)。 等待系统提示完成时,升级过程完成。 整个过程大约2-3分钟。 7,重新启动。

Linux内核编码风格(编程代码风格推荐)

这是翻译版本,英文原版是linux源码Documentation文件夹下的CodingStyle 一个良好风格的程序看起来直观、美观,便于阅读,还能有助于对程序的理解,特别在代码量比较大情况下更显现编码素质的重要性。相反没有良好的风格的代码读起来难看、晦涩,甚至有时候一个括号没对齐就能造成对程序的曲解或者不理解。我曾经就遇见过这样的情况,花费了很多不必要的时间在程序的上下文对照上,还debug了半天没理解的程序。后来直接用indent -kr -i8给他转换格式来看了。特此转过来一个关于代码风格的帖子分享一下~ Linux内核编码风格 这是一份简短的,描述linux内核首选编码风格的文档。编码风格是很个人化的东西,而且我也不愿意把我的观点强加给任何人,不过这里所讲述的是我必须要维护的代码所遵守的风格,并且我也希望绝大多数其他代码也能遵守这个风格。所以请至少考虑一下本文所述的观点。 首先,我建议你打印一份GNU的编码规范,然后不要读它。烧掉它,这是一个很高调的具有象征意义的姿态。 Anyway, here goes: 第一章:缩进 制表符是8个字符,所以缩进也是8个字符。有些异端运动试图将缩进变为4(乃至2)个字符深,这跟尝试着将圆周率PI的值定义为3没什么两样。 理由:缩进的全部意义就在于清楚的定义一个控制块起止于何处。尤其是当你盯着你的屏幕连续看了20小时之后,你将会发现大一点的缩进将会使你更容易分辨缩进。 现在,有些人会抱怨8个字符的缩进会使代码向右边移动的太远,在80个字符的终端屏幕上就很难读这样的代码。这个问题的答案是,如果你需要3级以上的缩进,不管缩进深度如何你的代码已经有问题了,应该修正你的程序。 简而言之,8个字符的缩进可以让代码更容易阅读,还有一个好处是当你的函数嵌套太深的时候可以向你提出告警。请留意这个警告。 在switch语句中消除多级缩进的首选的方式是让“switch”和从属于它的“case”标签对 齐于同一列,而不要“两次缩进”“case”标签。比如: switch (suffix) { case 'G': case 'g': mem <<= 30;

Linux内核源代码阅读与工具介绍

Linux的内核源代码可以从很多途径得到。一般来讲,在安装的linux系统下,/usr/src/linux 目录下的东西就是内核源代码。另外还可以从互连网上下载,解压缩后文件一般也都位于linux目录下。内核源代码有很多版本,目前最新的版本是2.2.14。 许多人对于阅读Linux内核有一种恐惧感,其实大可不必。当然,象Linux内核这样大而复杂的系统代码,阅读起来确实有很多困难,但是也不象想象的那么高不可攀。只要有恒心,困难都是可以克服的。任何事情做起来都需要有方法和工具。正确的方法可以指导工作,良好的工具可以事半功倍。对于Linux内核源代码的阅读也同样如此。下面我就把自己阅读内核源代码的一点经验介绍一下,最后介绍Window平台下的一种阅读工具。 对于源代码的阅读,要想比较顺利,事先最好对源代码的知识背景有一定的了解。对于linux内核源代码来讲,基本要求是:⑴操作系统的基本知识;⑵对C语言比较熟悉,最好要有汇编语言的知识和GNU C对标准C的扩展的知识的了解。另外在阅读之前,还应该知道Linux内核源代码的整体分布情况。我们知道现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序、网络等组成。看一下Linux内核源代码就可看出,各个目录大致对应了这些方面。Linux内核源代码的组成如下(假设相对于linux目录): arch这个子目录包含了此核心源代码所支持的硬件体系结构相关的核心代码。如对于X86平台就是i386。 include这个目录包括了核心的大多数include文件。另外对于每种支持的体系结构分别有一个子目录。 init此目录包含核心启动代码。 mm此目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm目录下,如对应于X86的就是arch/i386/mm/fault.c。 drivers系统中所有的设备驱动都位于此目录中。它又进一步划分成几类设备驱动,每一种也有对应的子目录,如声卡的驱动对应于drivers/sound。 ipc此目录包含了核心的进程间通讯代码。 modules此目录包含已建好可动态加载的模块。 fs Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext2文件系统对应的就是ext2子目录。 kernel主要核心代码。同时与处理器结构相关代码都放在arch/*/kernel目录下。 net核心的网络部分代码。里面的每个子目录对应于网络的一个方面。 lib此目录包含了核心的库代码。与处理器结构相关库代码被放在arch/*/lib/目录下。

Tftp服务器配置与使用

Tftp服务器配置与使用 TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。它基于UDP协议而实现,端口号为69。 此协议设计是基于实现小文件传输的目的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证。 在嵌入式开发中,TFTP服务常用于通过网线从PC服务端的TFTP目录中下载镜像文件到目标开发板中,以待烧写或运行。使用这种方式下载文件,操作方便,并且速度也较快。 第一步:在终端下首先查看是否已安装tftp服务器和客户端组件 验证命令如下: [root@localhost ~]#rpm -qa | grep tftp 需要出现如下已安装组件: tftp-0.39-1.i386 tftp-server-0.39-1.i386 第二步:安装tftp组件 如果没有安装tftp组件,从linux光盘中找到tftp组件的rpm包,分别为tftp-0.39-1.i386.rpm和tftp-server-0.39-1.i386.rpm。进入共享文件夹MyShare,将tftp组件的rpm包拷贝到根目录下的home目录中,使用命令rpm -ivh [软件包的完整路径],完成安装。 [root@localhost home] #cp -rf /mnt/hgfs/MyShare/tftp_rpm ./

[root@localhost home] # cd tftp_rpm [root@localhost tftp_rpm]#rpm -ivh tftp-server-0.39-1.i386.rpm [root@localhost tftp_rpm]#rpm -ivh tftp-0.39-1.i386.rpm 第三步:配置tftp服务 在命令行键入命令:vi /etc/xinetd.d/tftp,进入到tftp的配置文件。 [root@localhost home]# vi /etc/xinetd.d/tftp 修改配置文件/etc/xinetd.d/tftp : 1、将disable改为no 2、server_args改为-s /tftpboot -c,-s /tftpboot表示服务器默认的目录是/tftpboot ,-c参数表示允许上传新文件 3、保存退出vi。 第四步:启动tftp 启动tftp服务器,命令行键入命令:/etc/inid.d/xinetd start ,或者以前已启动过tftp服务,但修改配置文件后,需要重启tftp,使用命令:/etc/inid.d/xinetd restart 。 [root@localhost home]# /etc/inid.d/xinetd start [root@localhost home]# /etc/inid.d/xinetd restart 通过命令:netstat –a | grep tftp查看tftp服务是否启动。 [root@localhost home]# netstat –a | grep tftp 第五步:建立tftp的主工作目录

linux源代码分析实验报告格式

linux源代码分析实验报告格式

Linux的fork、exec、wait代码的分析 指导老师:景建笃 组员:王步月 张少恒 完成日期:2005-12-16

一、 设计目的 1.通过对Linux 的fork 、exec 、wait 代码的分析,了解一个操作系统进程的创建、 执行、等待、退出的过程,锻炼学生分析大型软件代码的能力; 2.通过与同组同学的合作,锻炼学生的合作能力。 二、准备知识 由于我们选的是题目二,所以为了明确分工,我们必须明白进程的定义。经过 查阅资料,我们得知进程必须具备以下四个要素: 1、有一段程序供其执行。这段程序不一定是进程专有,可以与其他进程共用。 2、有起码的“私有财产”,这就是进程专用的系统堆栈空间 3、有“户口”,这就是在内核中有一个task_struct 结构,操作系统称为“进程控制 块”。有了这个结构,进程才能成为内核调度的一个基本单位。同时,这个结构又 是进程的“财产登记卡”,记录着进程所占用的各项资源。 4、有独立的存储空间,意味着拥有专有的用户空间:进一步,还意味着除前述的 系统空间堆栈外,还有其专用的用户空间堆栈。系统为每个进程分配了一个 task_struct 结构,实际分配了两个连续的物理页面(共8192字节),其图如下: Struct task_struct (大约1K) 系统空间堆栈 (大约7KB )两个 连续 的物 理页 面 对这些基本的知识有了初步了解之后,我们按老师的建议,商量分工。如下: 四、 小组成员以及任务分配 1、王步月:分析进程的创建函数fork.c ,其中包含了get_pid 和do_fork get_pid, 写出代码分析结果,并画出流程图来表示相关函数之间的相互调用关系。所占工作 比例35%。 2、张少恒:分析进程的执行函数exec.c,其中包含了do_execve 。写出代码分析结 果,并画出流程图来表示相关函数之间的相互调用关系。所占工作比例35% 。 3、余波:分析进程的退出函数exit.c,其中包含了do_exit 、sys_wait4。写出代码 分析结果,并画出流程图来表示相关函数之间的相互调用关系。所占工作比例30% 。 五、各模块分析: 1、fork.c 一)、概述 进程大多数是由FORK 系统调用创建的.fork 能满足非常高效的生灭机制.除了 0进程等少数一,两个进程外,几乎所有的进程都是被另一个进程执行fork 系统调 用创建的.调用fork 的进程是父进程,由fork 创建的程是子进程.每个进程都有一

cisco tftp 操作

cisco tftp 操作 2007-10-12 09:16 1,在Windows*作系统的计算机上安装Cisco TFTP Server软件(文件名为TFTPServer1-1-980730.exe); 2,用Winzip软件将c2500-i-l.113-6.zip文件进行解压,解压后的文件名为c2500-i-l.113-6.bin,将此文件拷入硬盘中一子目录,如D:\cisco。 3,启动Cisco TFTP Server软件; 4,在TFTP Server软件界面上选择“View”――“Options”,在Options 界面上,在“TFTP Server root”选项上选择“Browse”,将该目录指向 c2500-i-l.113-6.bin文件所在的目录,如D:\cisco或其它。 5,进入要升级的路由器下,将以太网的地址配置成与安装TFTP软件的计算机在同一个网段,并能ping通该计算机(其实也可以不在同一网段,只要能保证能ping通即可)。 6,在路由器特权状态下(如Router#下),键入Copy tftp flash 系统提示:Address or name of remote host [ ]?时键入TFTP软件所在机器IP地址。 系统提示:Source filename [ ]?时键入要升级的IOS软件文件名,在例中为c2500-i-l(此处为字母l,不是数字1).11(这两个是数字1,不是字母l)3-6.bin(注意.Bin不能丢)。 系统提示Destination filename [ ]?时,直接回车即可,表示和源文件名一致。 后面还有其它提问,按提示*作即可(如还有提示删除以前的IOS文件,以及确认消息等)。 等待系统提示完成时,升级过程完成。 整个过程大约2-3分钟。 7,重新启动。 注意,在升级过程中,千万不可断电或造成路由器与TFTP服务器的网络不畅等问题! Cisco TFTP Server的使用 1.1 实验目的:

Linux源代码分析_存储管理

文章编号:1004-485X (2003)03-0030-04 收稿日期:2003-05-10 作者简介:王艳春,女(1964 ),副教授,主要从事操作系统、中文信息处理等方面的研究工作。 Linux 源代码分析 存储管理 王艳春 陈 毓 葛明霞 (长春理工大学计算机科学技术学院,吉林长春130022) 摘 要:本文剖析了Linux 操作系统的存储管理机制。给出了Linux 存储管理的特点、虚存的实现方法,以及主要数据结构之间的关系。 关键词:Linux 操作系统;存储管理;虚拟存储中图分类号:T P316 81 文献标识码:A Linux 操作系统是一种能运行于多种平台、源代码公开、免费、功能强大、与Unix 兼容的操作系统。自其诞生以来,发展非常迅速,在我国也受到政府、企业、科研单位、大专院校的重视。我们自2000年开始对Linux 源代码(版本号是Linux 2 2 16)进行分析,首先剖析了进程管理和存储管理部分,本文是有关存储管理的一部分。主要介绍了Linux 虚存管理所用到的数据结构及其相互间的关系,据此可以更好地理解其存储管理机制,也可以在此基础上对其进行改进或在此后的研究中提供借鉴作用。作为一种功能强大的操作系统,Linux 实现了以虚拟内存为主的内存管理机制。即能够克服物理内存的局限,使用户进程在透明方式下,拥有比实际物理内存大得多的内存。本文主要阐述了Linux 虚存管理的基本特点和主要实现技术,并分析了Linux 虚存管理的主要数据结构及其相互关系。 1 Lin ux 虚存管理概述 Linux 的内存管理采用虚拟页式管理,使用多级页表,动态地址变换。进程在运行过程中可以动态浮动和扩展,为用户提供了透明的、灵活有效的内存使用方式。 1)32 bit 虚拟地址 在Linux 中,进程的4GB 虚存需通过32 bit 地址进行寻址。Linux 中虚拟地址与线性地址为同一概念,虚拟地址被分成3个子位段,而大小为4k,如图1所示。 2)Linux 的多级页表结构 图1 32位虚拟地址 标准的Linux 的虚存页表为三级页表,依次为页目录(Pag e Directory PGD)、中间页目录(Pag e Middle Directory PMD )、页表(Page Table PT E )。在i386机器上Linux 的页表结构实际为两级,PGD 和PMD 页表是合二为一的。所有有关PMD 的操作关际上是对PGD 的操作。所以源代码中形如*_pgd _*()和*_pmd_*()函数实现的功能也是一样的。 页目录(PGD)是一个大小为4K 的表,每一个进程只有一个页目录,以4字节为一个表项,分成1024个表项(或称入口点),表项的索引即为32位虚拟地址的页目录,该表项的值为所指页表的起始地址。页表(PTE)的每一个入口点的值为此表项所指的一页框(page frame),页表项的索引即为32位虚拟地址中的页号。页框(page reame)并不是物理页,它指的是虚存的一个地址空间。 3) 页表项的格式 图2 Linux 中页目录项和页表项格式 4)动态地址映射 Linux 虚存采用动态地址映射方式,即进程的地址空间和存储空间的对应关系是在程序的执行过 第26卷第3期长春理工大学学报 Vol 26N o 32003年9月 Journal of Changchun University of Science and T echnology Sep.2003

相关文档