linux实验报告(编译内核)

合集下载

实验3-Linux内核编译实验doc资料

实验3-Linux内核编译实验doc资料

实验3-L i n u x内核编译实验《嵌入式系统》实验报告3 学号:姓名:班级:成绩:之后就可以make编译了:$ make zImage该命令的含义是:编译内核并生成一个新内核映像文件zImage所得到的内核文件有哪些?分别在什么目录?Init lib module.symvers System.map vmlinux vmlinux.o 4. 驱动安装在作业系统上的资源中下载并解压drivers.rar将其在D盘解压:“解压到当前文件夹”4.1 安装usb串口驱动运行:D:\drivers\win7\PL2303_Prolific_DriverInstaller_v110.exe5.设备连接及设置5.1 连接USB串口设备(领取USB串口设备)将USB串口设备插入电脑背面USB接口系统会自动识别该USB设备,该设备号可以通过电脑的“设备管理器->端口”查看;该USB串口的设备号是:Prolific USB-to-Serial Comm Port(COM4)。

相应的截图(根据实际情况,替换以下截图)为:5.2 打开putty打开:D:\drivers\putty.exe设置串口连接、串口号以及波特率;其中,串口号(serial line)为2.1所示的串口设备号。

5.3 tftp server设置新建文件夹:D:\tftpserver,便于tftp服务用;打开D:\drivers\Tftpd32\tftpd32.ini文件,将“BaseDirectory=.”更改为:“BaseDirectory=D:\tftpserver”打开“D:\drivers\Tftpd32\ tftpd32.exe”,启动tftp服务器6. 打开实验箱,建立连接通信(领取实验箱)6.1 将实验板拿出后,拨动拨码开关至【1000】,如下图所示,即从NAND Flash 启动。

6.2 将串口线和设备的第一个串口相连6.3 通过网线将PC的第一个网口(上面的网口)和开发板对连配置网络:打开网络和共享中心→更改适配器设置→网络2属性→Internet协议版本4(TCP/IPv4)→设置IP,如下图所示(IP为内网192网段的,如192.168.100.**)6.4 关闭PC系统防火墙控制面板→系统和安全→Windows防火墙→打开和关闭Windows防火墙—〉关闭Windows防火墙6.5 启动开发板,进入下载模式切换到putty操作界面,在开发板启动时,敲击任意键,进入到开发板的下载模式,如下图所示:通过help可以查看该bootloader所有的命令6.6 修改开发板环境变量FS210 # setenv serverip 192.168.100.192 //主机PC的IP 地址FS210 # setenv ipaddr 192.168.100.191 //板子的IP,不要和Windows IP 冲突FS210 # saveenv //保存环境变量使用【print】命令查看修改后的环境变量。

编译Linux内核

编译Linux内核

操作系统课程设计实验报告实验名称:编译Linux内核姓名/学号:俞文昌/20072842一、实验目的学习重新编译Linux内核,理解、掌握Linux内核和发行版本的区别。

二、实验内容编译Linux内核是一件比你想像的还要简单的事情,它甚至不需要你对内核有任何的了解,只要你具备一些基本的Linux操作系统的知识就可以进行。

本次实验,要求你在Fedora 10的Linux系统里,下载并重新编译其内核源代码(版本号2.6.27.5);然后,配置GNU的启动引导工具grub,成功运行重新编译成功的Linux 内核。

三、实验环境Fedaro10.四、实验步骤1.准备工作:安装Fedora 10。

给Linux分区至少分配15G的磁盘空间。

安装时,需选择安装开发工具,包括Gcc。

2.下载部署内核源代码:2.1检查当前内核版本:输入命令:uname –r:这一部检查当前内核的版本号,一边与后面自己编译的内核作比较。

2.2下载内核源码:我是在Windows下下载的,并传到了Linux下的Gavin文件夹(我的文档)下。

并解压:3.配置内核:在编译内核前,一般来说都需要对内核进行相应的配置。

配置是精确控制新内核功能的机会。

配置过程也控制哪些需编译到内核的二进制映像中(在启动时被载入),哪些是需要时才装入的内核模块(module)。

配置内核编译选项的方法有很多种:●make menuconfig,使用基于文本的选单式配置界面●make xconfig,使用X Windows (Qt) 界面●make gconfig,使用X Windows (Gtk) 界面●make oldconfig,使用文本界面,按照./.config文件的内容取其缺省值●make silentoldconfig,与上一个一样;不同的是,不再逐项提问了为与Fedora 10的配置选项一致,我们可以将Fedora 10的配置文件复制过来:具体操作如下。

linux实验报告(编译内核)参考模板

linux实验报告(编译内核)参考模板

湖北大学学生实验报告实验课程网络实用技术开课学院计算机与信息工程学院任课教师徐婕学生姓名骆婧学生学号20112211042100 70专业班级计科一班学生年级2011级2013-2014 学年第二学期一.实验目的通过实验,熟悉Linux操作系统的使用,掌握构建与启动Linux内核的方法;掌握用户程序如何利用系统调用与操作系统内核实现通信的方法,加深对系统调用机制的理解;进一步掌握如何向操作系统内核增加新的系统调用的方法,以扩展操作系统的功能。

二.实验内容1.Linux环境下的C或者C++编译和调试工具的使用2.向Linux内核增加新的系统调用,系统调用的功能为打印出自己的学号和姓名信息。

3.Linux新内核的编译、安装和配置。

4.编写应用程序以测试新的系统调用并输出测试结果。

三、实验步骤第一步:解压文件1.下载linux-3.13.3.tar.xz压缩包。

2.在Ubantu系统下,解压该文件,解压之后得到linux-3.13.3文件包# tar –xf linux-3.13.3.tar.xz3.将解压后的文件包复制到/usr/src# cp linux3.13.3 /usr/src第二步:修改源程序,增加系统调用1.gedit /usr/src/linux-3-13.3/kernel/sys.c (增加系统调用,使用面向内核的打印函数printk打印姓名学号)使用gedit命令,可以直接在文档编辑器中直接修改。

修改好后按保存关闭文档编辑器。

在开头加入头文件:#include<linuxlinkage.h>在末尾加入函数asmlinkage int sys_mycall(void){printk(KERN_ALERT "My name is XXXX!My studentid is XXXXXXX\n");return 1;}2.gedit /usr/src/linux-3-13.3/arch/x86/include/asm/syscalls.h在倒数第二行后插入asmlinkage int sys_mycall(void);3.gedit /usr/src/linux-3-13.3/arch/x86/syscalls/syscall_32.tbl最后一行添加一个系统调用的ID351 i386 mycall sys_mycall第三步:编译安装内核首先进到/usr/src/linux-3.13.3文件夹下# cd /usr/src/linux-3.13.31.make mrproper(清除内核中不稳定的目标文件,附属文件及内核配置文件)2.# make menuconfig保存设置Save并退出Exit3.# make bzImage (编译内核,大概需要20分钟,最后会出现提示:bzImageis ready。

编译linux实验报告

编译linux实验报告

编译linux实验报告
编译Linux实验报告
在计算机科学领域,Linux操作系统一直被广泛使用。

它是一个开放源代码的操作系统,具有稳定性和安全性。

在本次实验中,我们将学习如何编译Linux内核,并撰写实验报告以记录我们的实验过程和结果。

实验目的:
1. 了解Linux内核的编译过程
2. 熟悉编译工具和技术
3. 掌握编译过程中可能遇到的问题和解决方法
实验步骤:
1. 下载Linux内核源代码
2. 解压源代码并配置编译环境
3. 使用make命令编译内核
4. 安装编译后的内核
5. 测试新内核的稳定性和功能
实验结果:
经过一系列的操作,我们成功地编译了Linux内核,并将其安装到我们的计算机上。

新内核的稳定性和功能得到了验证,证明我们的编译过程是成功的。

实验总结:
通过本次实验,我们不仅了解了Linux内核的编译过程,还学习了如何使用编译工具和技术。

在实验过程中,我们遇到了一些问题,但通过查阅资料和尝试不同的解决方法,最终成功地完成了编译过程。

这次实验为我们提供了宝贵的
经验,也增强了我们对Linux操作系统的理解和掌握。

总的来说,编译Linux内核的实验是一次有意义的学习过程,我们通过实践提升了自己的技能和知识水平。

希望在未来的学习和工作中,能够运用这些经验和技能,为我们的计算机科学之路增添更多的成就和贡献。

基于Linux内核编程的实验报告(Linux内核分析实验报告)

基于Linux内核编程的实验报告(Linux内核分析实验报告)

基于Linux内核编程的实验报告(Linux内核分析实验报告)以下是为大家整理的基于Linux内核编程的实验报告(Linux内核分析实验报告)的相关范文,本文关键词为基于,Linux,内核,编程,实验,报告,分析,,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在教育文库中查看更多范文。

Linux内核分析实验报告实验题目:文件系统实验实验目的:linux文件系统使用虚拟文件系统VFs作为内核文件子系统。

可以安装多种不同形式的文件系统在其中共存并协同工作。

VFs对用户提供了统一的文件访问接口。

本实验的要求是(1)编写一个get_FAT_boot函数,通过系统调用或动态模块调用它可以提取和显示出FAT文件系统盘的引导扇区信息。

这些信息的格式定义在内核文件的fat_boot_sector结构体中。

函数可通过系统调用或动态模块调用。

(2)编写一个get_FAT_dir函数,通过系统调用或动态模块调用它可以返回FAT文件系统的当前目录表,从中找出和统计空闲的目录项(文件名以0x00打头的为从未使用过目录项,以0xe5打头的为已删除的目录项),将这些空闲的目录项集中调整到目录表的前部。

这些信息的格式定义在内核文件的msdos_dir_entry结构体中。

硬件环境:内存1g以上软件环境:Linux(ubuntu)2-6实验步骤:一:实验原理:以实验4为蓝本,在优盘中编译并加载模块,启动测试程序,查/proc/mydir/myfile的文件内容。

从优盘得到fat文件系统的内容存在msdos_sb_info结构中,然后得到msdos_sb_info结构相应的属性值,得到实验一的数据。

实验二中,得到fat文件系统第一个扇区的十六个文件信息。

然后按照文件名头文字的比较方法,应用归并排序的方法,将头文件是0x00和0xe5的文件调到前面,其他的文件调到后面二:主要数据结构说明:(1)超级块对象:数据结构说明:一个已经安装的文件系统的安装点由超级块对象代表。

Linux内核配置移植及编译实验

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,

linux实验十编译linux内核

linux实验十编译linux内核

实验十编译Linux内核10.1实验目的:掌握编译ARM系统内核的过程。

10.2实验内容:完成编译Linux 内核。

10.3实验设备:1、一套S3C2410RP嵌入式实验箱。

2、安装Redhat9的宿主PC机,并且配置好ARM Linux的开发环境。

10.4预备知识:熟悉Linux基本操作。

10.5实验步骤:1、在宿主PC机端,打开一个终端窗口(Terminal),点击【红帽ÆSystem ToolsÆTerminal】启动终端窗口,请您输入下列7条命令配置内核并编译内核:①cd /2410RP_linux/kernel /*进入Linux内核文件所在的目录*/② ls /*查看内核文件结构*/2、请您输入:③ make menuconfig /*推荐使用,如图10-1*/这条命令是用来调用菜单式的配制内核界面,相应的还有命令行式的配置方法。

图10-1make menuconfig界面是图形化的内核裁减界面。

通过此部分,我们可以方便的选择,决定哪些部分被加载并编译入LINUX内核,哪些部分被编译为模块,哪些部分不用。

在此我们建议您先别做任何修改,但可以进入每个选项熟悉该选项的功能,之后进行再次编译生成一个内核zImage文件。

3、请您输入,如图10-2:④make dep图10-24、编译内核,如图10-3,请您输入,:⑤make clean⑥ make zImage图10-3编译生成Linux的内核文件zImage, 保存在/2410RP_linux/kernel/arch/arm/boot下面,如图10-4。

图10-4make clean后第一次使用make zImage命令,会占用相当长的时间。

宿主机会根据autoconfig.h文件对系统进行编译。

首先使用交叉编译器(armv4l-unknown-gcc)把各个文件夹下用过的.c文件编译为二进制的目标文件,其次用链接器(armv4l-unknown -ld)把这些目标文件连接到一起;最后压缩,就得到了内核的镜像文件zImage。

Linux内核编译及常见错误实验报告

Linux内核编译及常见错误实验报告

***学生实验报告一、实验目的(1)学习重新编译Linux内核的方法(2)理解Linux标准内核和发行版本内核的区别。

二、实验内容在Linux系统中下载同一发行版本的版本号较高的内核,编译之后运行自己编译的内核,并使用uname-r命令查看是否运行成功。

由于不同版本的内核在编译过程中可能出现不同的问题,本书推荐的内核版本为4.16.10。

从第7章开始的进阶实验篇,都可以选用该版本的内核。

三、实验设备Vmware上运行的linux ubuntu 5.11.0-43-generic实验成功:linux ubuntu 4.18.0-generic(Ubuntu18.04均可)实验成功的方法在最后四、实验过程和原理分析一、实验(一)准备工作:在这里我建议用一个全新的虚拟机,避免编译错误对原来常使用的虚拟机造成不可逆的影响,安装好后就先安装gcc、make等工具首先下载好Linux***内核文件解压至/usr/src 目录下,如下:确认安装好gcc、make等工具,后可直接运行命令sudo make menuconfig进行查看内核功能是否需要编译,如果遇到如下错误可以运行命令sudo apt bison 或sudo apt-get install fiex bison命令解决错误:解决:(不建议)(强烈建议)除此之外还可以直接运行,上一条命令解决不了就用下面这个:sudo apt-get install --reinstall bison libbison-dev flex libfl-dev解决上述错误(强烈建议)运行完上述命令后再次输入sudo make menuconfig便正常进入如下:见到这个界面后无需任何多余操作,使用键盘方向键选择<Save>回车再回车即可此时.config文件生成成功.config文件是隐藏文件记得加参数-a此外还有一个方法就是用cp 命令从原有系统的内核复制.config文件过来也可以命令:sudo cp /boot/config- 5.11.0-43-generic ./.config(二)编译内核为了避免多线程编译时同时出现过多错误,我们这里一开始只使用单线程编译在这里除了用make编译还可以用make-kpkg等工具,个人比较喜欢用make-kpkg但课本用make所以我接下来的实验也先用make完成。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

湖北大学
学生实验报告
实验课程网络实用技术
开课学院计算机与信息工程学院
任课教师徐婕
学生姓名骆婧
学生学号************** 70
专业班级计科一班
学生年级2011级
2013-2014 学年第二学期
一.实验目的
通过实验,熟悉Linux操作系统的使用,掌握构建与启动Linux内核的方法;掌握用户程序如何利用系统调用与操作系统内核实现通信的方法,加深对系统调用机制的理解;进一步掌握如何向操作系统内核增加新的系统调用的方法,以扩展操作系统的功能。

二.实验内容
1.Linux环境下的C或者C++编译和调试工具的使用
2.向Linux内核增加新的系统调用,系统调用的功能为打印出自己的学号和
姓名信息。

3.Linux新内核的编译、安装和配置。

4.编写应用程序以测试新的系统调用并输出测试结果。

三、实验步骤
第一步:解压文件
1.下载linux-3.13.3.tar.xz压缩包。

2.在Ubantu系统下,解压该文件,解压之后得到linux-
3.13.3文件包
# tar –xf linux-3.13.3.tar.xz
3.将解压后的文件包复制到/usr/src
# cp linux3.13.3 /usr/src
第二步:修改源程序,增加系统调用
1.gedit /usr/src/linux-3-13.3/kernel/sys.c (增加系统调用,使用面向内核的
打印函数printk打印姓名学号)
使用gedit命令,可以直接在文档编辑器中直接修改。

修改好后按保存关闭文档编辑器。

在开头加入头文件:
#include<linuxlinkage.h>
在末尾加入函数
asmlinkage int sys_mycall(void)
{
printk(KERN_ALERT "My name is XXXX!My studentid is XXXXXXX\n");
return 1;
}
2.gedit /usr/src/linux-3-1
3.3/arch/x86/include/asm/syscalls.h
在倒数第二行后插入
asmlinkage int sys_mycall(void);
3.gedit /usr/src/linux-3-13.3/arch/x86/syscalls/syscall_32.tbl
最后一行添加一个系统调用的ID
351 i386 mycall sys_mycall
第三步:编译安装内核
首先进到/usr/src/linux-3.13.3文件夹下
# cd /usr/src/linux-3.13.3
1.make mrproper(清除内核中不稳定的目标文件,附属文件及内核配置文件)
2.# make menuconfig
保存设置Save并退出Exit
3.# make bzImage (编译内核,大概需要20分钟,最后会出现提示:bzImage
is ready。


4.#make modules(编译模块,大概需要一个多小时)
5.#make modules_install(安装模块)
6.#make install
7 #sudo update-grub(修改启动配置文件)
8.#reboot(重启系统)
重启进入系统后查看当前内核版本
#uname –r
会显示已经编译成功的内核版本号
第四步:编写测试程序并测试
1.新建一个空白文档,并重新命名为test.c,写入以下函数,并保存#include<stdio.h>
int main()
{
syscall(354);
return 0;
}
2测试用gcc命令编译测试文件
# gcc -o test test.c
#./test
#dmesg(将信息打印在日志文件)
三.实验体会
在没有编译内核系统调用之前,我感觉老师布置的这个题目是什么意思都木有搞清楚,总感觉无从下手,也怕自己弄不好造成最后系统永不了的悲剧。

但是我还是选择硬着头皮去做,通过在网上查找很多资料和教程,才对这个任务要怎么去完成才有了比较清晰的概念。

当然实现的过程中也遇到了不少麻烦。

1.版本选择问题
首先我担心在3.13.3的版本上直接改动的话如果最后系统调用不成功,会检查不出是内核没有编译好还是测试文件有问题,所以我在网上下了好几个2.6的版本进行试验。

可是最后发现每个内核版本里面的那几个需要修改的文件并不在同样的目录下面,依据版本而定。

有点版本解压后甚至缺失很多子文件夹,这就让我非常零乱,但是最后通过仔询问其他同学找到了文件包完整的版本。

最后的最后决定用3.13.3的版本直接做。

2修改源文件问题
在2.6的版本里面应该要更改kernel下的entry.S,结果改成了其他的地方的entry.S。

最后导致在编译内核的过程中,在make bzImage 的时候,系统报错。

类似这样的问题犯了好几次,都是文件木有找对位置就匆忙地进行修改。

导致最后每次到make bzImage的时候就会报错。

在3.13的版本修改源文件是也因为不仔细,把sys_mycall写成了sys_mycalls 等等,最后编译过程中出现了函数没有定义等问题。

3.命令选择问题
这其中涉及到权限问题,当把文件包移动到/usr/src之后是不能直接进到子目录里面去修改.网上给的方法是使用vim命令或者vi命令,我试了一下,发现这其实是把要修改的文件的信息显示在终端上,但是这样修改显然不直观不方便,因为在终端上想要换行,写入
都不好操作,退出、保存等还需要专门的命令,后来又在网上看到了gedit命令,再试一次,发现它是把文件在文本编辑器中打开来的,这样方便好操作。

改完后也能及时检查是否有误。

4测试程序编写问题
测试程序里面开始包含的头文件不正确,int main()里面的参数传递没有和自己在源文件里面的相互对应,syscall又写成了sysmycall,导致测试函数不能进行测试。

后来对照自己写的系统调用函数和系统调用号,检查出来错误。

通过这次实验,让我收获了不少东西,首先接到一个任务,不要怕麻烦,不要老想这任务有多纠结,只要多查资料,仔细理解一定会感觉越来越清晰明了,遇到问题的时候更不能泄气,而是应该努力寻求解决办法,很重要的一点就是多尝试,在尝试中你才能找到最好办法,就比如linux下的很多命名,不会的就百度谷歌,理解了命名的功能后就会越用越熟练,越用越有趣。

成功之后再回过头来看发现其实是一个很简单的任务。

相关文档
最新文档