实验6 ——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内核移植、根文件系统、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操作系统实验报告姓名班级学号指导教师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内核配置移植及编译实验

return platform_driver_register(&dm9k_driver); } 7.添加 YAFFS 文件系统支持 将我们提供的 YAFFS 的源代码 yaffs2.tar.gz 拷贝到 linux-2.6.24.4 的同 级目录下,解压该源码包,获得 YAFFS 源码: # pwd /root/2410-s # cp /mnt/hgfs/e/yaffs2.tar.gz ./ # tar zxvf yaffs2.tar.gz 然后进入 yaffs2 目录,运行./patch-ker.sh 给内核打上补丁: # cd yaffs2 # ./patch-ker.sh c ../linux-2.6.24.4/ 这样打好补丁以后,再做正确的配置,内核就可以支持 YAFFS 文件系统了。 8.配置和编译内核 到现在,一个简单的内核就准备好了,我们还需要做一些配置,然后编译, 内核才能正常使用。 在内核源代码的根目录下运行 make menuconfig 命令,进入配置界面: # make menuconfig (1)选择硬件系统 做如下选择: System Type --->
S3C2410 Machines ---> [*] SMDK2410/A9M2410 [ ] IPAQ H1940 [ ] Acer N30 [ ] Simtec Electronics BAST (EB2410ITX) [ ] NexVision OTOM Board [ ] AML M5900 Series [ ] Thorcom VR1000
.size = SZ_4M, }, [3] = {
.name = "User Space", .offset = 0x680000, .size = 0x1980000, }, }; 这样就把我们的 64M 的 NAND Flash 分为四个区: 第一个区从 0x00000000 到 0x00080000,大小为 0.5M 第二个区从 0x00080000 到 0x00280000,大小为 2M 第三个区从 0x00280000 到 0x00680000,大小为 4M 第四个区从 0x00680000 到 0x02000000,大小为 25.5M 5.添加 LCD 支持 我们的开发平台上配置有 640*480 的液晶屏,我们来为它加上驱动支持。 需要在 arch/arm/mach-s3c2410/mach-smdk2410.c 中添加一些内容。 # vi arch/arm/mach-s3c2410/mach-smdk2410.c 首先要包含我们的 LCD 使用的数据结构的头文件,增加如下内容: #include <asm-arm/arch-s3c2410/fb.h> #include <linux/platform_device.h> 然后添加如下内容: static struct s3c2410fb_display up2410_fb[] __initdata = { { .lcdcon5 = (1<<12)|(1<<11)|(1<<9)|(1<<8)|(1<<0), .type = (3<<5), .width = 640, .height = 480, .pixclock = 39721,
【IT专家】Linux系统移植实验

本文由我司收集整编,推荐下载,如有疑问,请与我司联系
Ø 配置内核时按“空 ”选择,配置完成后保存退出 $make menuconfig Device Drivers -- Character devices -- * FS4412 LED Device Support Ø 保存退出,重新编译后把 uImage 拷贝到 tftpboot 下 $ makeuImage $ cparch/arm/boot/uImage/tftpboot 重新启动开发板,加载内核并运行。在终端下执行下面操作 Ø 创建设备节点 # mknod/dev/ledc5000 Ø 运行测试程序并观察现象 #./fs4412_led_app 6.编译 LED 驱动为模块 Ø 配置内核时按“空 ”选择,配置完成后保存退出 $ make menuconfig Device Drivers -- Character devices -- M FS4412 LED DeviceSupport Ø 保存退出,重新编译后把 zImage 拷贝到 tftpboot 下,把驱动模块拷贝到 /source/rootfs 下 $ makeuImagemodules $ cparch/arm/boot/uImage/tftpboot/ $ cpdrivers/char/fs4412_led_drv.ko/source/rootfs/ 重新启动开发板,linux 运行起来后在终端下操作 Ø 创建设备节点
# mknod/dev/ledc5000
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
Ø 加载 LED 驱动模块
#insmod fs4412_led_drv.ko
Ø 运行测试程序并观察现象
#./fs4412_led_app
fs4412_led_drv.c 源代码如下:
LINUX内核在arm平台上的移植

◆定义数据、代码段、bbs(未初始化数据段)起始地址变量并对bbs段初始化 ◆设置寄存器以初始化系统硬件 ◆关闭中断 ◆初始化LCD显示 ◆将数据段复制到内存 ◆跳转到内核起始函数start_kernel继续执行 ◆对主寄存器的修改 © 2006 Embedded
Init.S
• • • • • • • • • • • • • • • • • • • /* * linux/arch/arm/boot/bootp/init.S * * Copyright (C) 2000 Russell King * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * Header file for splitting kernel + initrd. Note that we pass * r0 through to r3 straight through. */ .section .start,#alloc,#execinstr .type _entry, #function _entry: adr r10, initdata ldr r11, initdata sub r11, r10, r11 @ work out exec offset b splitify .size _entry,. - _entry
Linux2.6.37内核移植到Mini2440(六)

Linux2.6.37内核移植到Mini2440(六)Linux 2.6.37内核移植到Mini2440(六)1. 触摸屏库Tslib移植(1) 解压下载的tslib1.4压缩包下载地址:笔者这里没有使用tslib1.4。
发现根本就无法测试。
总是得不到按下信号。
于是就下载了最新版的tslib。
#tar -zxvf kergoth-tslib-1.0-89.tar.gz#cd tslib- kergoth-tslib-1.0-89(2) 配置tslib编译项#./autogen.sh (注意,就能执行一次,多执行的话可能linux重启后会崩溃很麻烦,要慎用哦)./configure --prefix=/usr/local/tslib1.4/ CC=arm-linux-gcc \--host=arm-linux ac_cv_func_malloc_0_nonnull=yes --enable-inputapi=no【注意】./configure --prefix=/usr/local/tslib1.4/ CC=arm-linux-gcc \--host=arm-linux ac_cv_func_malloc_0_nonnull=yes --enable-inputapi=no1)上面的—prefix后的/usr/local/tslib1.4/表示触摸屏tslib在目标板的路径!在编译安装的时候,先安装到宿主机的/usr/local/tslib1.4下,下载到开发板后依然要放在/usr/local/tslib1.4/下。
2)如果不添加ac_cv_func_malloc_0_nonnull=yes,则编译会出现错误:undefined reference to `rpl_malloc'(3) 编译tslib#make经过一小段时间的编译,如果没出错就OK了(4) 安装tslib到宿主机的/usr/local/tslib1.4#make install(5) 修改/usr/local/tslib1.4/etc/ts.conf把第二行的#号去掉,但其前面不能有空格(6) 复制tslib到开发板的相同路径(下面的路径是NFS中开发板的根位置)#mkdir rootfs/usr/local //rootfs根据自己的根文件系统位置修改#cp -arf /usr/local/tslib1.4/ /root/mywork/mini2440/rootfs/usr/loc al/注意:/usr/local/tslib1.4/下的bin、lib、etc复制到开发板根文件系统下的/usr/local/tslib1.4下。
移植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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验 6 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 ?= arm
CROSS_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-2.6.28\arch\arm\mach-pxa目录下的Kconfig文件,增加在裁剪内核时支持对EELiod/Liod平台的选择
【图5-3-3】
第十步:linux-2.6.28/drivers/mtd/maps文件夹中增加一个xsbase270-flash.c文件(注:xsbase270-flash.c从该目录下的mainstone-flash.c修改而来, 也可以直接复制实验代码中的文件)。
第十一步:修改linux-2.6.28\drivers\mtd\maps目录下的Makefile文件,增加编译xsbase270-flash.c的编译选项,
即:obj-$ (CONGIG_MTD_XSBASE270 ) += xsbase270-flash.o。
第十二步:修改linux-2.6.28\drivers\mtd\maps目录下的Kconfig文件,增加在裁剪内核时支持对EELiod/Liod平台flash驱动的选择
【图5-3-4】
第十三步:在linux-2.6.28\arch\arm\mach-pxa\include\mach目录下增加一个xsbase270.h的头文件。
第十四步:修改linux-2.6.28\arch\arm\mach-pxa\include\mach目录中irqs.h文件(也可以直接复制实验代码中的文件),在文件最后增加EELiod/Liod平台相关中断定义,内容如下。
【图5-3-5】
第十五步:在linux-2.6.28目录下执行make xsbase270_defconfig。
第十六步:在linux-2.6.28目录下执行make menuconfig命令,进入内核配置主菜单。
第十七步:在内核配置主菜单中选择System Type---> Intel PXA2xx Implementations ---> Select target board 选择(X) Emdoor EELiod/Liod Development Platform,该选项对应于第九步修改的内容。
【图5-3-6】
第十八步:在内核配置主菜单中选择Device Drivers---> Memory Technology Device (MTD)support ---> Mapping drivers for chip access ---> 选择(*) CFI Flash device mapped on Emdoor EELiod board,该选项对应于第12步修改的内容。
【图5-3-7】
第十九步:在内核配置主菜单中选择Boot options--->(root=/dev/nfs ip=bootp console=tyyS0,115200 mem=64)改为root=/dev/mtdblock2 rootfstype=jffs2 console=tyyS0, 115200 mem=64M。
【图5-3-8】
第二十步:配置完成后,在提示是否保存内核配置的提示对话框中选择<Yes>。
【图5-3-9】
第二十一步:配置完成后,在Linux-2.6.28目录下运行make zIamge编译内核,编译后的内核文件保存在Linux-2.6.28/arch/arm/boot/目录下。
第二十二步:将编译好的内核文件zImage下载到目标平台,(必须同时要下载Linux文件系统),重新启动开发平台,查看内核启动情况(注:Bootloader源码中的command.c文件中kernel(0,###)函数,其中###必须与1141对应才能引导内核)。