实验四Linux内核移植实验

合集下载

linux的移植

linux的移植

linux的移植、内核、文件系统的生成与下载一、实验目的1.了解内核编译过程2.了解linux移植的基本过程,掌握内核和文件系统的下载方法。

3.掌握嵌入式主机运行环境的配置。

二、实验内容1. 学习内核编译的过程2. 学习linux移植的基本过程2. 学习内核和文件系统的生成与下载方法三、实验设备1. PentiumII以上的PC机、EL-ARM860实验箱四、linux的移植说明1.内核编译1)内核的结构本实验系统运行的linux版本是针对linux-2.6.28进行移植的,其组成结构如下图所示:图linux-2.6.28的目录结构图Linux内核非常庞大,包括驱动程序在内有上百兆。

如下图示其主要结构目录:/arch子目录包含了所有与硬件体系结构相关的内核移植代码。

其中每一个目录都代表一种硬件平台,对于每种平台都应该包括:boot: 包括启动内核所使用的部分或全部平台的相关代码。

kernel:包括支持体系结构特有的特征代码lib:包括存放体系结构特有的通用函数的实现代码mm:包括存放体系结构特有的内存管理程序的实现mach-xxx:包括存放该处理器的移植代码/Documentation子目录包含有关内核的通用解释和注释。

/drivers子目录包含内核中所有的设备驱动程序,每个不同的驱动占用一个子目录,如char、block、net、mtd、i2c等。

/fs 子目录包含了所支持的文件系统的代码,如EXT、FAT、NTFS、JFFS2等。

/include 子目录包含了建立内核代码时所需的大部分库文件的头文件,该模块利用其他模块重建内核。

同时,它也包括不同平台需要的库文件,被放置在include/linux 子目录下。

/init子目录包含了内核的初始化代码,内核从此目录下开始工作。

/ipc 子目录包含了内核的进程间通讯的代码。

/kernel 子目录是内核的最核心部分,包含了进程调度、定时器等,而和平台相关的一部分代码放在arch/*/kernel目录下。

linux系统移植实验手册

linux系统移植实验手册

实验四 Linux-2.6.14内核移植--网卡驱动的添加【实验目的】本实验通过在上个实验结果的linux2.6.14内核上移植CS89900A网卡驱动,使其可以通过网络nfs的方式挂载在ubantu主机环境上的文件系统,从而实现linux系统的完全启动。

【实验环境】1、Ubuntu 7.0.4发行版2、GEC2410平台以及开发板中移植好的u-boot3、交叉编译器arm-linux-gcc【实验步骤】(1) 下载linux内核/pub/linux/kernel/v2.6/linux-2.6.14.1.tar.bz2 ,下载linux2.6.14内核致/source/kernel目录,如果没有/source/kernel目录,自行建立目录。

root@:/source/kernel# cd /source/kernel/root@:/source/kernel# tar -xjvf linux-2.6.14.tar.bz2root@:/source/kernel/linux-2.6.14# pwd/source/kernel/linux-2.6.14root@:/source/kernel# cd linux-2.6.14进入内核解压后的目录,以后示例中,只要是相对路径全部是相对于/source/kernel/linux-2.6.14这个目录。

(2) 修改Makefile文件修改内核目录树根下的的Makefile,指明交叉编译器:root@:/source/kernel/linux-2.6.14# vim Makefile找到ARCH和CROSS_COMPILE,修改ARCH = armCROSS_COMPILE = arm-softfloat-linux-gnu-保存退出,然后设置你的PATH环境变量,使其可以找到你的交叉编译工具链:root@:/source/kernel/linux-2.6.14# echo $PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games如果第一个路径为/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin,则不用再进行设置,如果不是则进行下面步骤进行设置:root@:/source/kernel/linux-2.6.14#export PA TH=$PA TH:/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin:(动态加载环境变量,终端关闭后,自己所加载的环境变量立即消失)。

Linux内核移植指导书

Linux内核移植指导书

Linux内核移植实验指导书实验目的:完成linux2.6.14内核向ARM平台的移植和剪裁实验内容分为以下几个步骤:1、准备实验环境,包括:安装VMware Tools,准备源码文件。

2、修改环境变量,对flash进行分区,将分区信息加入内核源码,指定启动时的设备初始化,3、下载Yaffs2,解压Yaffs2并将其加入Linux内核,修改Makefile,4、配置内核产生.config文件,然后编译:make zImage ,5、修改、创建根文件系统,所需设备:PC + VMWare + linux操作系统实验要求本次实验要求提交实训报告,可简要描述实验步骤,重点描述本人在实训过程中遇到的问题和解决的方法。

实验步骤由老师提供所需要的工具安装包、内核源码和实训指导书,各位同学根据文档逐步配置编译,实训内容包括:安装vmware tools、搭建交叉编译环境、修改内核源码、Makefile的改写、内核配置裁减、编译调试等。

1.安装vmware虚拟机,安装vmware tools2.修改内核源码,修改环境变量,将分区信息加入内核源码,指定启动时的设备初始化3.安装Yaffs2,解压Yaffs2并将其加入Linux内核,修改Makefile4.配置内核产生.config文件,然后编译系统内核所需设备:PC+linux操作系统1、准备工作需要以下工具和文件:●在PC机D盘建立目录“vmshare”,将上述文件拷贝到“vmshare”目录下,然后安装vmware虚拟机和vmware tools●启动linux后,配置虚拟机与winxp的文件共享,PC机上的共享目录是e盘下的vmshare目录,linux下的共享目录是/mnt/hgfs/vmshare2、展开源码在本步骤中,展开源码,并设置环境变量mkdir /home/armlinux //创建工作目录cp /mnt/hgfs/vmshare/* /home/armlinux //把所有源码拷贝到工作目录下cd / //回到根目录tar -jxvf /home/armlinux/arm-linux-gcc-3.4.1.tar.bz2 //展开交叉编译工具cd /home/armlinux //回到工作目录下tar -jxvf linux-2.6.14.tar.bz2 //展开内核源码建立环境变量、修改Makefile将交叉编译工具路径和内核源码路径加入环境变量。

理工大学Linux实验报告

理工大学Linux实验报告

实验名称实验一Linux操作系统定制安装实验地点博学楼实验时间4月16日网络实验室一、实验目的和要求⑴通过对Linux 操作系统的定制安装,建立对Linux操作系统的初步认识,为后续实验的进行提供基础平台。

⑵掌握Linux操作系统的虚拟机定制安装。

⑶熟悉Linux文件目录结构二、实验内容和原理实验内容:利用虚拟机软件定制安装Linux操作系统,熟悉安装过程中各个选项的意义。

实验原理:虚拟机可以说是一种软件,也可以说是一种技术,它允许用户在一台主机上虚拟出多台计算机,每台虚拟的计算机都可以有自己的硬件及软件配置。

三、主要仪器设备PC机、VMware Player、Redhat/Ubuntu/Fedora四、操作方法与实验步骤⑴安装VMware Player⑵在VMware Player当中创建一个新的虚拟机,指定安装包的路径。

⑶安装定制Redhat Enterprise Linux 5.0说明:⑴对软件开发和和网络服务包进行定制。

⑵选择samba服务、nfs服务、tftp服务、Telnet服务和FTP服务⑶关闭系统防火墙、禁用SELinux服务。

⑷手动设置系统分区。

五、实验数据记录和处理1、安装Ubuntu进入界面:2、选择tftp服务3、对软件开发和网络服务包进行定制,都选择老的软件开发和老的网络服务器4、关闭系统防火网5、禁用SELinux服务六、实验结果与分析七、讨论、心得通过这次实验,在自己电脑的虚拟机上安装好了Ubuntu的镜像文件,并在Ubuntu下写了一些简单的命令,深深地感觉在虚拟机上运行Ubuntu远远要比双系统下方便得多,尤其是在两种不同系统下来回切换。

由于电脑上之前就已经安装过虚拟机,所以,实验报告中未对虚拟机的安装加以赘述。

实验名称实验二熟悉Linux系统的基本命令实验时间4月18日实验地点博学楼网络实验室一、实验目的和要求⑴熟悉Linux命令格式⑵学会如何获取命令帮助信息⑶熟练掌握Linux常用命令⑷掌握GCC命令的使用及其常用参数的含义二、实验内容和原理实验内容:系统设置命令、文件及文件夹操作命令、压缩与解压缩命令、自动补全与历史命令、管道与重定向命令、GCC命令的使用三、主要仪器设备PC机、装有Linux操作系统的虚拟机四、操作方法与实验步骤⑴练习以下常用命令的使用shutdown、reboot、logout、exit、useradd、userdel、su、cd、ls、touch、mkdir、cp、rm、rmdir、mv、more、less、man、du、find、clear、grep、cat、history、tar、unzip、chmod、管道命令|以及重定向命令⑵举例说明管道命令| 的使用⑶举例说明重定向命令<、<<、>、>>的使用⑷编写一个C的源程序,并用gcc进行编译,练习使用gcc的各个参数,理解参数的意义五、实验数据记录和处理1.cd、ls 、mkdir 新建hello文件夹2.cp 复制a到hello文件夹3.rm移除hello 中的a文件4.rmdir移除hello文件夹5.mv更改文件名字、移动文件6.du -b 以字节为单位显示cache目录的大小7.find / -name lolo搜索当前目录下名为lolo的文件8.grep 在lan/b.txt文件里查找字符3,并输出行号-n;输出b.txt内容9.grep重定向追加>>六、讨论、心得本次实验室是熟悉Linux的基本操作命令。

实验5-3 Linux 内核移植实验

实验5-3 Linux 内核移植实验

实验 5-3 Linux-2.6.28移植实验【实验目的】熟悉Linux-2.6.28移植过程。

【实验步骤】第一步:从/pub/linux/kernel/v2.6下载linux-2.6.28.tar.bz2压缩文件(或光盘中提供);【图5-3-1】第二步:将linux-2.6.28.tar.bz2压缩文件复制到Linux工作目录;第三步:在Linux下利用tar jxvf linux-2.6.28.tar.bz2命令解压linux-2.6.28.tar.bz2压缩文件。

第四步:进入解压后的linux-2.6.28目录下,利用vi编辑工具修改linux-2.6.28目录下的顶层Makefile文件。

第五步:修改linux-2.6.28目录下的顶层Makefile文件,设置编译linux操作系统的CPU体系架构变量ARCH 和所使用的交叉编译工具链变量CROSS_COMPILE(注:实验使用arm-linux交叉编译工具链 4.2.1版本,可从/pub/snapgear/tools/arm-linux/下载arm-linux-tools-20070808.tar.gz压缩文件,解压到/OPT目录下)。

改为ARCH ?= armCROSS_COMPILE ?=/opt/usr/local/bin/arm-linux-【图5-3-2】第六步:将linux-2.6.28目录下的arch/arm/configs/mainstone_defconfig文件复制为xsbase270_defconfig文件。

第七步:在linux-2.6.28/arch/arm/mach-pxa目录下增加一个xsbase270.c文件(实际上从该目录下的mainstone.c复制而来.也可以直接复制实验代码中的文件),然后根据实际平台进行修改。

第八步:修改linux-2.6.28\arch\arm\mach-pxa目录下的Makefile文件,增加编译xsbase270.c 的编译选项,即:obj-$(CONFIG_MACH_XSBASE270) += xsbase270.o。

linux内核移植、根文件系统、busybox

linux内核移植、根文件系统、busybox

/ #通过共享目录
为了方便使用 arm-linux-gcc,我们可以把它所在的目录添加到环境变量中 在 export PATH 前面插入 PATH=/arm2410/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/bin/:$PATH 这样一句,以后启动就可以直接使用 arm-linux-gcc 了。 要使环境变量立马生效,可以使用下面的命令。 source /etc/profile 我们可以用 arm-linux-gcc -v 来查看交叉编译器版本,如果是 4.1.1 就是正确的。 (3)设置 Nand Flash 分区信息表 设置 Nand Flash 的分区信息表是为内核启动以后加载文件系统用的,可以将 Nand Flash 看成我们 PC 机的硬盘,对 Nand Flash 的分区看成是对硬盘的分区,硬盘可以分成 C 盘,D 盘之类,而 Nand Flash 则可以分成很多块,每块有不同的名字、大小和用途。下面 是对 Super-ARM 实验箱的 Nand Flash 进行分区的情况(参考表 5-1-1): � 第 0 块命名为 "uboot" ,它用来存放 u-boot.bin 映像,起始地址是 Nand Flash 的 0x000000,最大 0x30000 个字节;
var
� �
第七行创建 var 目录下的子目录。 第八行更改 var/tmp 目录的权限。
3、创建设备文件 先了解一下 Linux 的设备:Linux 中主要有 2 种类型的设备:字符设备(无缓冲且只能顺 序存取)、块设备(有缓冲且可以随机存取)。每个设备都必须有主、次设备号,主设备号相同 的设备是同类设备(使用同一个驱动程序)。这些设备中,有些设备是对实际存在的物理硬件 的抽象,而有些设备则是内核自身提供的功能(不依赖于特定的物理硬件,又称为"虚拟设备 ")。每个设备在 /dev 目录下都有一个对应的文件(节点)。可以通过 cat /proc/devices 命令查 看当前已经加载的设备驱动程序的主设备号。 你可以在你的宿主机上执行这个命令看看你的 宿主机所拥有的设备文件,可以看到,Linux 有很多很多的设备文件,在嵌入式 Linux 中并 没有这么多的设备,下面用 mknod 命令创建一些主要设备文件。 关于 Linux 的设备号:很多设备在 Linux 下已经有默认的主次设备号,如帧缓冲设备是 Linux 的标准字符设备,主设备号是 29,如果 Linux 下有多个帧缓冲设备,那么这些帧缓冲 设备的次设备号就从 0~31(Linux 最多支持 32 个帧缓冲设备)进行编号,比如 fb0 对应的 次设备号就是 0,fb1 为 1,类推。用户也可以创建自己的设备文件,比如下一篇章中我们 要讨论的 Led 设备,需要注意的是用户自己的设备号不能与一些标准的系统设备号重叠。 Linux 下创建设备节点的命令是 mknod,下面是它的命令格式: mknod Name { b | c } Major Minor Name 是设备名称,“b”或“c”用来指定设备的类型是块设备还是字符设备。Major 指定设备的主设备号,Minor 是次设备号。 下面我们来创建嵌入式 Linux 系统中一些基本的设备文件, 必须是 root 权限, 命令如下: mknod -m 600 dev/console c 5 1 #创建系统控制台设备 mknod -m 666 dev/null c 1 3 #创建空设备, 任何写入都将被丢弃, 任何读取都得到 EOF mknod dev/fb0 c 29 0 #创建第一个帧缓冲设备,显示接口 mknod dev/tty c 5 0 #创建 TTY 设备 mknod dev/tty0 c 4 0 #创建当前虚拟控制台 mknod dev/tty1 c 4 1 mknod dev/tty2 c 4 2 mknod dev/tty3 c 4 3 mknod dev/tty4 c 4 4 ln -s dev/fb0 dev/fb #创建创建 fb 到 fb0 的链接 4、准备启动配置文件 Linux 启动所需要的文件有 etc/inittab、 etc/init.d/rcS、 etc/fstab 这三个文件(以下均假定当 前路径在/arm2410/rootfs)。 下面创建 inittab 文件,命令:gedit etc/inittab, 在文件中添加如下内容: ::sysinit:/etc/init.d/rcS ::askfirst:-/bin/sh ::respawn:-/bin/sh ::restart:/sbin/init ::ctrlaltdel:/sbin/reboot

linux操作系统实验报告

linux操作系统实验报告

linux操作系统实验报告第一篇:linux操作系统实验报告Linux实验报告一一、实验步骤及内容1.虚拟机软件的安装(1)先准备虚拟机安装包。

(2)更改安装路径:“D: VMwareVMware Workstationvmware.exe”(3)输入序列号:ctrl+v,在安装过程中不能进行复制剪切操作。

(4)不能重新启动,才能继续安装汉化版D: vmwarevmware workstation2.新建一个虚拟机并进行配置(1)单击新建虚拟机虚拟机的类型选择:典型安装选择客户端操作系统:linux虚拟机的名字及位置根据需要网络类型选择:,桥接。

指定的磁盘容量删除软驱:双击floppy—remove虚拟内存设置:双击memory—1024MB设置linux的安装文件:选择安装镜像文件—指定第一个安装文件—就可以啦!之后会提示安装第二个安装文件就进行选择第二个中间鼠标切换用CTRL+ALT。

3.安装LINUX操作系统(1)要确定鼠标是否在虚拟机的激活状态下:敲回车不需要检测安装文件选择skip进入linux的安装前的配置选项:选择安装的语言—中文简体键盘:--默认鼠标:--默认安装类型:--workstation磁盘分区:--自动分区引导程序:默认网络配置:默认防火墙:无防火墙支持的语言:中文时区:亚洲-上海密码:root123456安装的软件包:全部。

二.在已有虚拟机软件的基础上安装LINUX的技巧。

(1)新建虚拟机—典型安装—linux ,red hat linux---给虚拟机命名,并且指定安装位置d:red hat linux---桥接---10G。

(2)在刚才建立的虚拟机上安装linux系统.(3)配置要安装的linux系统的安装文件iso镜像文件(4)选择配置好linux镜像文件刚才建立的虚拟机,启动虚拟机,开始安装。

三.实验总结充分了解linux系统的安装,学会新建虚拟机,在虚拟机上安装linux系统.和一些简单的技巧并对此门课程有了一定的兴趣。

Linux系统的移植

Linux系统的移植
实质上是内核配置菜单本身结构庞大,内容 复杂。因此熟悉与了解该菜单的各项具体含义显 得比较重要。
嵌入式系统设计
Linux 内核的编译菜单有几个版本,运行:
1)基于字符界面的config: make config进 入命令行,可以一行一行的配置;
2)基于图形界面的menuconfig:make menuconfig 进入menuconfig 菜单。(稳定且用得最多)
建议经常使用的部分直接编译到内核中,比如网卡。
嵌入式系统设计
内核源码结构
(存放目录:/usr/src/Linux-)
Linux2.4.18
/arch /drivers
/arm
sparc
/m68k
/kernel /lib /init
/boot mach-s3c2410 /kernel /lib
/ipc /fs
嵌入式系统设计
Network firewalls: 是否让内核支持采用网络防火墙。如果计算机想当 firewalls server或者是处于TCP/IP 通信协议网络的网路结构 下,这一项就选上。 Packet socket mmapped IO : 选该项则Packet socket可以利用端口进行快速通讯。 IP advanced router : 如果你想把自己的Linux 配成路由器功能这项肯定要选。 选上后会带出几个子项。这些子项可以更精确配置相关路由功能。
3)基于图形界面的xconfig: make xconfig 进入xconfig菜单。
嵌入式系统设计
嵌入式系统设计 基于字符界面的make config
嵌入式系统设计 基于图形界面的menuconfig 配置菜单
嵌入式系统设计 基于图形界面的xconfig 配置菜单

实验4_内核移植

实验4_内核移植

实验四内核移植实验目的:了解Linux内核源代码的目录结构及各目录的相关内容,了解Linux内核各配置选项内容和作用,掌握Linux内核配置文件的作用,掌握Linux内核的编译过程,掌握将新增内核代码加入到Linux内核结构中的方法。

实验硬件条件:1、开发板tiny64102、传输数据用的USB线、串口线等实验软件条件:1、开发环境:根文件:yaffs2.tar.bz2编译器:arm-linux-gcc-4.3.2内核源码:linux-2.6.38.tar.bz2宿主机:ubuntu10.042、测试环境:终端软件:超级终端下载软件:dnw实验步骤:一、实验步骤1.解压linux源码进入根目录下的/home/tom/source/kernel目录,解压linux-2.6.3源码,指令tar xvfj linux-2.6.38.tar.bz2,如图:2.修改架构与编译器进入解压完的linux-2.6.38目录修改架构,编译器(需要在arm上运行,所以用交叉编译器)191改为ARCH ?=arm192行改为CROSS_COMPILE ?=arm-linux-退出后生成默认配置文件指令:cp arch/arm/configs/s3c6400_defconfig .config修改配置项,指令:make menuconfig找到System Type里将MINI6410选上,然后退出保存。

二、实验步骤1.拷贝NAND FLASH驱动到linux-2.6.38里相应的文件位置处指令:cp ../nandflash移植需要替换的源码/s3c_nand.c drivers/mtd/nand/cp ../nandflash移植需要替换的源码/s3c_nand_mlc.fo (空格)drivers/mtd/nand/cp ../nandflash移植需要替换的源码/nand_base.c(空格) drivers/mtd/nand/cp ../nandflash移植需要替换的源码/Kconfig drivers/mtd/nand/ cp ../nandflash移植需要替换的源码/regs-nand.h (空格) arch/arm/plat-samsung/include/plat/2.修改nand驱动Makefile进入nand目录,指令cd drivers/mtd/nand修改Makefile,指令gedit Makefile在20行增加obj-$(CONFIG_MTD_NAND_S3C) += s3c_nand.o在末尾行添加obj-$(CONFIG_MTD_NAND_S3C) += s3c_nand_mlc.fo保存退出,进入linux2.6.38目录,执行make menuconfig找到Device Drivers进入Memory Technology Device (MTD)support勾选相应选项如图:Device Drivers---><*> Memory Technology Device (MTD) support --->[*] MTD partitioning support[*] Command line partition table parsing<*> Direct char device access to MTD devices<*> Caching block device access to MTD devices<*> NAND Device Support --->< > NAND Flash support for Samsung S3C SoCs 去掉不要选<*> NAND Flash support for S3C SoC[*] S3C NAND Hardware ECC退出并且保存三、实验步骤1.添加yaffs2文件系统的支持进入kernel目录,解压yaffs2.tar.bz2指令:tar xvfjyaffs2.tar.bz2进入解压出来的yaffs2目录执行指令:./patch-ker.sh c m ../linux-2.6.38进入linux-2.6.38目录,执行make menuconfig进入File systems选择[*] Miscellaneous filesystems --->勾选yaffs2 file system support以及与yaffs2相关选项,全部勾选直到Journalling Flash File System v2(JFFS2) support前面退出并且保存2.添加ubifs文件系统的支持执行make menuconfig进入Device Drivers勾选相应选项Device Drivers --->Memory Technology Device (MTD) support ---> Enable UBI - Unsorted block images --->进入File systems勾选相应选项File systems --->Miscellaneous filesystems --->UBIFS file system support保存退出后,执行make zImage,将生成的zImage烧入实验板,生成的zImage在arch/arm/boot下实验结果:在这次试验中是我学习到知识最多的一节课,应为涉及到的知识面太多了,以前从来没接触过,在这次内核移植的过程中我遇到了太多的问题,主要对内核移植没有很好的理解,不过最后在老师的帮助下也都完成了任务,也对内核移植有了更深的认识和理解。

内核实验2、Linux2.6内核移植实验

内核实验2、Linux2.6内核移植实验
Linux2.6 内核移植
一、 实验目的
移植 Linux2.6 内核到开发板,其它硬件资源驱动可以暂时不考虑 Samsung S3C2440A
Nand flash
Samsung K9D1208V0M 64M
RAM
64M
软件资源
cross toolchain 3.4.1
bootloader
<*>Support for AMD/Fujitsu flash chip <*>Support for ROM chip in bus mapping NAND Flash Device Drivers--->
................................ <*>NAND Device Support <*>NAND Flash support foe S3C2410/S3C2440 Soc Character devices---> ............................. [*]Non-standard serial port support [*]S3C2410 RTC Driver File systems---> <>Second extended fs support #去除 ext2 支持 Pseudo filesystems---> [*]Virtual memory file system support(former shm fs) [*]/dev file system support(OBSOLETE) [*]Automatically mount at boot(NEW) Miscellaneous filesystems---> ............................ <*>JFFS2 <*>cramfs ............................. Network File Systems----> <*>NFS file system support 保存退出

linu 内核移植 很好的学习

linu 内核移植 很好的学习


m m , 包含体系结构相关的内存管理代码

lib, 包含与体系结构相关的库代码 (vsprint f 等等 )

m ach- ( 目标平台目录 ), 包含基于此体系结构平台相关的代


docum ent at ion- 包含内核的文档

drivers- 包含设备驱动代码。每类设备有相应的子目录,如
内核的一些基本概念
进程的基本概念 linux 中每一个进程由一个 tas k_s truc t 结构描述,定义于 \inc lude \linux\s c he d.h. 也就是 PCB. 其中包含了系统用 来管理进程的所有信息:进程状态,调度信息(优先级), 各种标识, IPC 有关信息,时间和定时信息,文件系统西 信息, VM 信息,页面信息,环境 c o nte xt 等 .
内核的一些基本概念
Linux 的内存管理,虚拟内存可以提供以下的功能: 广阔的地址空间:系统的虚拟内存可以比系统
的实际内存大很多倍。 进程的保护:系统中的每一个进程都有自己的
虚拟地址空间。这些虚拟地址空间是完全分开的,这样一个 进程的运行不会影响其他进程。并且,硬件上的虚拟内存机 制是被保护的,内存不能被写入,这样可以防止迷失的应用 程序覆盖代码的数据。
Linux 内核移植的主要工作
3 、编写 Bo ot loa d e r Bo o t lo a d e r 的基本功能主要下面几个 :
硬件初始化(时钟、 F la s h 、 S DRAM 、串口 、片选等)
实现一种通信协议 (xm od e n , zm od e n , or a sm a ll pr otocol th a t u se r de fin e d )

嵌入式Linux系统移植

嵌入式Linux系统移植

• 每个体系结构可以有若干变种variant,或 不同配置的硬件machine,统称subarchitecture。以arm体系结构举例:
– variants 包括arm7tdmi, arm926ejs, strongarm,xscale
– machine 包括edb7312, smdk2410, omap-h2
– u32 __be32_to_cpu(u32); /* convert big-endian to cpu's byte order */
– u32 __le32_to_cpus(u32); /* convert little-endian to cpu's byte order */
2019/5/4
• scripts此目录包含用于配置核心的脚本文件,在配置内核时用到。
• documentation 此目录是一些文档,非常详细,起参考作用。
2019/5/4
操作系统实验
27
Linux内核向S3C2410移植
• S3C2410简介 • 移植内容:
移植Bootloader 移植Linux内核 移植根文件系统
2019/5/4
操作系统实验
3
硬件平台对移植的影响
• Linux硬件平台 • 硬件平台对移植的影响
– 处理器字长 – 字节顺序 – 时间
2019/5/4
操作系统实验
4
Linux硬件平台
• 在Linux内核里,每一个处理器指令集对应 一个独立的体系结构architecture,比如
– alpha, arm, i386, mips, ppc
• Linux内核对多平台有很好的支持 • 内核的对外部接口是统一的,并且与平台无关 • 内核的大多数代码也是与平台无关的 • 主要的体系结构相关代码存在于

嵌入式Linux内核移植试验

嵌入式Linux内核移植试验

07秋嵌入式实验1. 实验设备的连接1. 参看《JXARM9-2410-1用户手册》中第一章,熟悉目标设备硬件,进行硬件检测。

2. 参看《JXARM9-2410-1用户手册》中第二章,安装好实验设备:电源,并口等。

3. 参看《JXARM9-2410-1用户手册》中第三章,了解目标设备硬件资源。

2. 软件安装与设置参看《JXARM9-2410-1用户手册》中第四章,在主机Windows环境下安装实验环境:ADT,而DNW(一种超级终端软件)和tftp可以直接运行。

3. ADT IDE 开发流程参看《JXARM9-2410-1用户手册》中第五章,通过并口线连接目标机的简易仿真口(ARM9SIMPLE),进行无操作系统实验:(实验教材P38)(1)对于包含ADT 1000仿真器的用户,请选择ARM9LPT,对于简易调试器的用户,请选择ARM9SIMPLE,本实验选择ARM9SIMPLE。

(2)导入examples目录中的工作区文件“examples.aws”,调试运行leddemo、stepper 等程序(3)注意:要运行的工程需设置为当前工程4. Uboot基本实验参看《JXARM9-2410-1用户手册》中第七章的“7.2 Windows环境下使用u-boot”:(实验教材P186)(1)将连接目标机简易仿真口的并口线去掉,连接好UART0串口线,网线。

(2)在宿主机打开远程登陆软件DNW(或者超级终端),选择115200,COM1,建立与目标机的连接(3)重新启动目标机,在DNW中会看到与目标机LCD相同的信息,表示连接成功!(4)在超级终端中使用Uboot命令行接口,练习Uboot的基本命令:help、flinfo、bdinfo、md、dmp、printenv、setenv、saveenv、run等5. 嵌入式Linux内核移植实验参看《JXARM9-2410-1用户手册》中第六章(1)参看6.1和6.2节,熟悉交叉开发环境,建立宿主机环境。

Linux内核移植与根文件系统构建

Linux内核移植与根文件系统构建

Linux内核移植
10、SCSI device support
如果有SCSI 设备(SCSI 控制卡,硬盘或光驱等)则选上这项。目前SCSI 设备类型已经比较多,要具体区分它们你得先了解他们所使用的控制 芯片类型。2.6.X 内核中对各类型SCSI设备已经有更具体详细的支持。 <*> scsi support; <*>scsi disk support;
Linux内核移植
5、Networking option
网络选项,它主要是关于一些网络协议的选项。Linux 功能也就是在于 对网络功能的灵活支持。这部分内容相当多,根据不同情况,一般我 们把以下几项选上。 5.1、 packet socket 包协议支持,有些应用程序使用Packet 协议直接同网络设备通讯, 而不通过内核中的其它中介协议。同时它可以让你在TCP 不能用时找 到一个通讯方法。 5.2、 unix domain socket 对基本UNIX socket 的支持 5.3、 TCP/IP networking 对TCP/IP 协议栈的支持,当然要。如果你的内核很在意大小,而且 没有什么网络要就,也不使用类似X Window 之类基于Unix Socket 的应用那你可以不选,可节省大约144K 空间。
二、内核与根文件系统实验
• • • • 安装完成后依次执行以下命令: [root# root] Make dep [root# root] Make [root# root] Make PREFIX=./root install
由于根文件系统是内核启动时挂载的第一个文件系统那么根文件系统就要包括linux启动时所必须的目录和关键性的文件例如linux启动时都需要有init目录下的相关文件在linux挂载分区时linux一定会找etcfstab这个挂载文件等根文件系统中还包括了许多的应用程序bin目录等任何包括这些linux系统启动所必须的文件都可以成为根文件系统

LINUX内核移植实验

LINUX内核移植实验

4 LINUX内核移植实验4.1 资源1.linux-2.6.24.4.tar.bz2 (Linux内核源码的压缩包,下载地址)2.yaffs2.tar.gz (yaffs文件系统源码的压缩包)3.dm9000.h和dm9000.c (dm9000网卡驱动程序)4.2 解压源码包1.在XP中,把“04/下午/src”文件夹拷贝到“//192.168.1.12”的共享文件夹uptech内,并把uptech中的“src”更名为“04 linux”2.在Linux虚拟机中进入该文件夹“cd /home/uptech/04 linux”ls可见4个文件:“linux-2.6.24.4.tar.bz2”、“yaffs2.tar.gz”、“dm9000.h”、“dm9000.c”◆bz2压缩包用“tar jxvf”解压◆gz压缩包用“tar zxvf”解压3.解压Linux源码压缩包,即输入命令“tar jxvf linux-2.6.24.4.tar.bz2”4.解压YAFFS源码压缩包,即输入命令“tar zxvf yaffs2.tar.gz”4.3 修改Makefile文件,支持交叉编译1.cd /home/uptech/04 linux/linux-2.6.24.2,该目录下就是linux的内核源码2.修改Makefile文件,使之支持交叉编译,也就是在Linux上编译出ARM开发板上运行的内核程序。

ARCH ?= arm (目标平台是arm)CROSS_COMPILE ?= arm-linux-(交叉编译器的前缀是arm-linux-) 4.4 得到.config文件1.得到.config文件将“/home/uptech/04 linux/linux-2.6.24.2/arch/arm/configs/s3c2410_defconfig”文件拷贝成“/home/uptech/04 linux/linux-2.6.24.2/.config”cp arch/arm/configs/s3c2410_defconfig .config2.对内核进行裁剪(此时暂时不做裁剪,仅是看看)make menuconfig4.5 修改Nand Flash分区修改“/home/uptech/04 linux/linux-2.6.24.2/arch/arm/plat-s3c24xx/common-smdk.c”文件中的“struct mtd-partition smdk_default_nand_part[]”这个结构体:第一个分区从0x0000 0000 到0x0008 0000,大小为0.5M第二个分区从0x0008 0000 到0x0028 0000,大小为2M第三个分区从0x0028 0000 到0x0068 0000,大小为4M第四个分区从0x0068 0000 到0x0400 0000,大小为57.5M具体做法:(1) vi arch/arm/plat-s3c24xx/common-smdk.c(2)修改分区信息结构体static struct mtd_partition smdk_default_nand_part[] = {[0] = {.name = "Bootloader",.size = 0x80000,.offset = 0,},[1] = {.name = "Linux Kernel",.offset = 0x80000,.size = SZ_2M,},[2] = {.name = "Root File System",.offset = 0x280000,.size = SZ_4M,},[3] = {.name = "User Space",.offset = 0x680000,.size = 0x3980000,},};4.6 添加LCD支持修改“/home/uptech/04 linux/linux-2.6.24.2/arch/arm/mach-s3c2410/mach-smdk2410.c”。

linux操作系统内核实验报告

linux操作系统内核实验报告

linux操作系统内核实验报告篇一:linux操作系统实验报告LINUX操作系统实验报告姓名班级学号指导教师XX 年 05月 16 日实验一在LINUX下获取帮助、Shell实用功能实验目的:1、掌握字符界面下关机及重启的命令。

2、掌握LINUX下获取帮助信息的命令:man、help。

3、掌握LINUX中Shell的实用功能,命令行自动补全,命令历史记录,命令的排列、替换与别名,管道及输入输出重定向。

实验内容:1、使用shutdown命令设定在30分钟之后关闭计算机。

2、使用命令“cat /etc/cron.daliy”设置为别名named,然后再取消别名。

3、使用echo命令和输出重定向创建文本文件/root/nn,内容是hello,然后再使用追加重定向输入内容为word。

4、使用管道方式分页显示/var目录下的内容。

5、使用cat显示文件/etc/passwd和/etc/shadow,只有正确显示第一个文件时才显示第二个文件。

实验步骤及结果:1. 用shutdown命令安全关闭系统,先开机在图形界面中右击鼠标选中新建终端选项中输入命令Shutdown -h 302、使用命令alias将/etc/cron.daliy文件设置为别名named,左边是要设置的名称右边是要更改的文件。

查看目录下的内容,只要在终端输入命令即可。

取消更改的名称用命令unalias命令:在命令后输入要取消的名称,再输入名称。

3.输入命令将文件内容HELLO重定向创建文本文件/root/nn,然后用然后再使用追加重定向输入内容为word。

步骤与输入内容HELLO一样,然后用命令显示文件的全部内容。

4.使用命令ls /etc显示/etc目录下的内容,命令是分页显示。

“|”是管道符号,它可以将多个命令输出信息当作某个命令的输入。

5实验二文件和目录操作命令实验目的:1、掌握LINUX下文件和目录的操作命令,如pwd、cd、ls、touch、mkdir、rmdir、cp、mv、rm等。

移植linux内核

移植linux内核

此内核移植参考T ekkaman Ninja 的文章在此向他表示感谢前提准备:开发板mini2440开发板linux内核为linux-2.6.22.2NOR FLASH为superVIVI注:本人仅仅是从网上搜集的材料然后根据自己的板子情况一点调试修改的其中可能有些错误或不必要修改的地方,(本人也是新手所以谅解下吧)转载请注明出处-----------------hongshaoone一、将Linux2.6.22.2内核源码放到工作目录的kernel文件夹下,并解压二、修改内核源码根目录下的Makefile文件#ARCH ?= arm#CROSS_COMPILE ?=arm-linux-三、修改arch/arm/plat-s3c24xx/common-smdk.c文件,修改Nand Flash的分区信息和Nand Flash 的硬件信息。

(1)static struct mtd_partition smdk_default_nand_part[] = {[0] = {.name = "vivi",.size = SZ_16K*20,.offset = 0,},[1] = {.name = "kernel",.offset = SZ_16K*20, //SZ_16K*20开始为SZ_32K*10,不过make时出错,换成为SZ_16K*20就OK了不知道为什么.size = SZ_2M,},[2] = {.name = "yaffs2",.offset = SZ_2M+SZ_16K*20,.size = SZ_2M*20, // SZ_2M*20 是我随便写的不想再算了呵呵},此处的分区一定要与supervivi的分区一致我是用的 [x] bon part 0 320k 2368k 所以只分了三个区(2)static struct s3c2410_platform_nand smdk_nand_info = {.tacls = 0,.twrph0 = 30, //这三个数字要改的以前是20 60 20.twrph1 = 0,.nr_sets = ARRA Y_SIZE(smdk_nand_sets),.sets = smdk_nand_sets,};四、修改drivers/mtd/nand/s3c2410.c,去掉nand flash 的ECC。

Linux内核移植 (china-unix)

Linux内核移植 (china-unix)

首先打开arch/arm/kernel/vmlinux.lds文件,找到815行 ,代码如下: 815 ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support")
20.4.2
建立machine_desc结构
Linux内核提供了MACHINE_START和 MACHINE_END宏供建立machine_desc结构使用,建议使 用宏建立结构。 打开arch/arm/mach-s3c2410/mach-mini2440.c文件,加 入下面的代码:
20.2
平台相关代码结构
Linux内核代码目录基本是安装功能块划分的,每个功能 块的代码存放在一个目录下。如mm目录存放内存管理单元相 关代码;ipc存放了进程间通信相关的代码;kernel存放进程 调度相关代码等。 arch目录下每个平台的代码都采用了与内核代码相同的 目录结构。以arch/arm目录为例,该目录下mm、lib、kernel 、boot目录与内核目录下对应目录的功能相同。此外,还有一 些以字符串mach开头的目录,对应不同处理器特定的代码。 从arch目录结构可以看出,平台相关的代码都存放到arch目录 下,并且使用与内核目录相同的结构。使用SourceInsight工具 可以看到许多的同名称函数,原因就是内核代码调用的函数 是平台相关的,每个平台都有自己的实现方法。对于内核来 说,使用相同的名字调用,通过编译选项选择对应平台的代 码。
20.4
建立目标平台代码框架
在20.2.2节编译的内核代码最后出现了链接错误,提示 vmlinux.lds文件链接失败。lds文件是GNU ld工具使用的一 种脚本文件,该文件描述了如何分配链接后的内存区域和地 址等信息,通过lds文件报的错误可以顺藤摸瓜分析问题所 在。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

合肥学院嵌入式系统设计实验报告(2013- 2014第二学期)专业:实验项目:实验四 Linux内核移植实验实验时间: 2014 年 5 月 12实验成员:_____指导老师:***电子信息与电气工程系2014年4月制一、实验目的1、熟悉嵌入式Linux的内核相关代码分布情况。

2、掌握Linux内核移植过程。

3、学会编译和测试Linux内核。

二、实验内容本实验了解Linux2.6.32代码结构,基于S3C2440处理器,完成Linux2.6.32内核移植,并完成编译和在目标开发板上测试通过。

三、实验步骤1、使用光盘自带源码默认配置Linux内核⑴在光盘linux文件夹中找到linux-2.6.32.2-mini2440.tar.gz源码文件。

输入命令:#tar –jxvf linux-2.6.32.2-mini2440-20110413.tar对其进行解压。

⑵执行以下命令来使用缺省配置文件config_x35输入命令#cp config_mini2440_x35 .config;(注意:x35后面有个空格,然后有个“.”开头的 config )然后执行“make menuconfig”命令,但是会出现出现缺少ncurses libraries的错误,如下图所示:解决办法:输入sudo apt-get install libncurses5-dev 命令进行在线安装ncurses libraries服务。

安装好之后在make menuconfig一下就会出现如下图所示。

⑶配置内核界面,不用做任何更改,在主菜单里选择<Exit>退出,并选“Yes”保存设置返回到刚命令行界面,生成相应配置的头文件。

编译内核:#make clean#make zImage在执行#make zImage命令时会出现如下错误:错误:arch/arm/mach-s3c2440/mach-mini2440.c:156: error: unknown field 'sets' specified in initializer通过网上查找资料于是在自己的mach-mini2440.c中加入#include <linux/mtd/mtd.h>#include <linux/mtd/nand.h>#include <linux/mtd/nand_ecc.h>#include <linux/mtd/partitions.h>#include <plat/nand.h>再次make zImage以下就不会出现错误了。

编译结束后,会在arch/arm/boot目录下生成linux内核映象文件:zImage⑷进行zImage文件测试首先Nor Flash启动开发板,在超级终端中选择功能号[k],用dnw下载刚刚配置的zImage镜像文件。

然后再把开发板Nand Flash启动,x35触屏会出现小企鹅的图案,同时超级终端也会出现如下图所示画面:2、官网下载源码移植2.1 移植前准备⑴官网下载内核Linux-2.6.32.tar.bz2。

新建一个工作目录s3c2440,将内核源码包拷贝至/home/linux2.6.32.2工作目录下。

⑵下载yaffs2代码官网下载cvs-root.tar.gz压缩包,拷贝至/home/linux2.6.32.2工作目录下。

2.2 建立自己的目标平台⑴解压内核源码进入linux2.6.32.2目录下执行解压命令:#tar –jxvf linux-2.6.32.tar.bz2 ,将内核源码进行解压。

⑵进入内核目录,修改makefile,并对内核进行默认配置进行修改183行,修改:ARCH ?=armCROSS_COMPILE ?=arm-linux-⑶给内核打yaffs2文件系统的补丁执行#tar -zxvf cvs-root.tar.ga解压命令,对cvs-root.tar.gz压缩包进行解压。

①修改内核fs/Kconfig在内核fs/Kconfig文件中添加两行内容:#Patched by YAFFS Source”fs/yaffs2/Kconfig”②修改内核fs/Makefile在Makefile中添加一行:ojb-$(CONFIG_YAFFS_FS)+=yaffs2/③在内核fs/目录下创建yaffs2目录将yaffs2源码目录下的Makefile.kernel文件复制为内核fs/yaffs2/Makefile;将yaffs2源码目录下的Kconfig文件复制到内核fs/yaffs2目录下;将yaffs2源码目录下的*.c 和*.h文件复制到内核fs/yaffs2目录下。

④修改机器码由于Bootloader传递给Linux内核的机器号为1999,为与Bootloader传递参数一致,修改Linux内核的机器号。

友善之臂已经为 mini2440 申请了自己的机器码为 1999,它位于linux-2.6.32.2/arch/arm/tools/mach_types文件中。

⑤修改时钟源频率在 mach-mini2440.c(删除原来的mach-mini2440.c,通过复制mach-smdk2440.c 得到的新的mach-mini2440.c)的第 160 行static void __init smdk2440_map_io(void)函数中,把其中的 16934400(代表原 SMDK2440 目标板上的晶振是 16.9344MHz)改为 mini2440 开发板上实际使用的 12000000(代表 mini2440 开发板上的晶振 12MHz)。

找到MACHINE_START(S3C2440, "SMDK2440") ,修改为:MACHINE_START(MINI2440, "FriendlyARM Mini2440 development board")⑥从 SMDK2440 到 MINI2440因为我们要制作自己的 mini2440 平台体系,因此把 mach-mini2440.c 中所有的smdk2440 字样改为 mini2440。

除此之外,还有一个地方需要改动,在 mini2440_machine_init(void)函数中,把smdk_machine_init()函数调用注释掉,因为我们后面会编写自己的初始化函数,不需要调用该函数。

2.3 定制内核配置⑴使用 Linux 官方自带的 mini2440 配置,在 Linux 源代码根目录下执行#make mini2440_defconfig命令:⑵移植 Nand 驱动并更改分区信息进入到/home/linux2.6.32.2/linux-2.6.32.2/arch/arm/mach-s3c2440文件夹中执行: # gedit mach-mini2440.c命令:在 mach-mini2440.c 中加入以下代码:static struct mtd_partition mini2440_default_nand_part[] = {[0] = {.name = "supervivi",.size = 0x00040000,.offset = 0,},[1] = {.name = "param",.offset = 0x00040000,.size = 0x00020000,},[2] = {.name = "Kernel", ; 对应/dev/mtdblock2.offset = 0x00060000,.size = 0x00500000,},[3] = {.name = "root",.offset = 0x00560000,.size = 1024 * 1024 * 1024,},[4] = {.name = "nand",;.offset = 0x00000000,.size = 1024 * 1024 * 1024,}};static struct s3c2410_nand_set mini2440_nand_sets[] = {[0] = {.name = "NAND",.nr_chips = 1,.nr_partitions = ARRAY_SIZE(mini2440_default_nand_part),.partitions = mini2440_default_nand_part,},};static struct s3c2410_platform_nand mini2440_nand_info = {.tacls = 20,.twrph0 = 60,.twrph1 = 20,.nr_sets = ARRAY_SIZE(mini2440_nand_sets),.sets = mini2440_nand_sets,.ignore_unset_ecc = 1,};如下图所示:还需要把 nand flash 设备注册到系统中,static struct platform_device *mini2440_devices[] __initdata = { &s3c_device_usb,&s3c_device_lcd,&s3c_device_wdt,&s3c_device_i2c0,&s3c_device_iis,&s3c_device_nand, ;把nand flash设备添加到开发板的设备列表结构};⑶配置和编译带 YAFFS2 支持的内核在执行#make zImage命令时会出现如下错误:错误:arch/arm/mach-s3c2440/mach-mini2440.c:156: error: unknown field 'sets' specified in initializer通过网上查找资料于是在自己的mach-mini2440.c中加入#include <linux/mtd/mtd.h>#include <linux/mtd/nand.h>#include <linux/mtd/nand_ecc.h>#include <linux/mtd/partitions.h>#include <plat/nand.h>再次make zImage以下就不会出现错误了。

执行命令:#make menuconfig要使用yaffs2文件系统,需要先配置nand flash驱动支持,在Device drivers菜单中选择MTD选项如图,并按回车进入找到NAND Device Support选项并进入选择Nand Flash驱动支持返回到内核配置主菜单,并找到File systems选项进入找到如图选项Miscellaneous filesystems并进入找到YAFFS2支持选项,如图选择然后<Exit>返回即可。

相关文档
最新文档