linux内核编译和生成makefile文件实验报告
- 格式:doc
- 大小:988.00 KB
- 文档页数:8
实验一嵌入式 Linux 开发环境的搭建及 Makefile 应用一、实验目的:1.熟悉嵌入式 Linux 开发基本过程及基本命令。
2.了解嵌入式 Linux 开发中各种工具的基本用途。
3.搭建好嵌入式 Linux 的开发环境。
4.通过对包含多文件的 Makefile 的编写,熟悉各种形式的Makefile 编写,加深对 Makefile 中用户自定义变量、自动变量及预定义变量的理解。
二、实验内容:1.安装 Vmware 及 Ubuntu;2.熟悉 Linux 下相关命令:属性查询、修改,路径、目录的查询、修改、删除,压缩、解压等;3.熟悉编辑工具;4.熟悉 makefile 文件的基本作用(编写一个包含多文件的Makefile)。
三、Make 工程管理器:Makefile如今能得以广泛应用,这还得归功于它被包含在Unix系统中。
在make诞生之前,Unix系统的编译系统主要由“make”、“install”shell脚本程序和程序的源代码组成。
它可以把不同目标的命令组成一个文件,而且可以抽象化依赖关系的检查和存档。
这是向现代编译环境发展的重要一步。
1977年,斯图亚特·费尔德曼在1贝尔实验室里制作了这个软件。
2003年,斯图亚特·费尔德曼因发明了这样一个重要的工具而接受了美国计算机协会(ACM)颁发的软件系统奖。
Makefile文件是可以实现自动化编译,只需要一个“make”命令,整个工程就能完全自动编译,极大的提高了软件开发的效率。
目前虽有众多依赖关系检查工具,但是make是应用最广泛的一个。
一个程序员会不会写makefile,从一个侧面说明了这个程序员是否具备完成大型工程的能力。
1.Makefile 基本规则一个简单的 Makefile 语句由目标、依赖条件、指令组成。
smdk6400_config :unconfig@mkdir -p $(obj)include $(obj)board/samsung/smdk6400其中:smdk6400_config:目标;unconfig:先决条件;@mkdir -p $(obj)include $(obj)board/samsung/smdk6400:指令。
实验四内核裁减和编译一、实验目的1.了解和掌握内核源代码的目录结构;2.了解内核系统配置方式,了解Makefile和config.in脚本文件的作用;3.了解内核各项内容;4.熟悉make命令的使用。
二、实验环境预装redhat9.0(内核版本2.4.x)的PC机一台,XScale嵌入式实验箱一台(已构建嵌入式linux系统),以太网线一根,交叉编译工具链。
三、实验步骤①察看和了解Linux内核的目录及内容;②察看和了解Linux内核的Makefile文件及作用;③察看和了解Linux内核的config.in文件及作用;④使用menuconfig或xconfig察看内核编译选项及作用;⑤开关某些编译选项,自己裁剪一个Linux内核;A.[root @localhost ~]# cd XSBASE/xsbase/Kernel/2.4.18-rmk-pxal-XSBASE[root @localhost 2.4.18-rmk-pxal-XSBASE]# make menuconfigB.设置开发板上的鼠标不能操作。
进入Input Core device,然后敲空格键,取消屏幕上的鼠标操作。
退出时并保存。
C.[root @localhost 2.4.18-rmk-pxal-XSBASE]# make dep[root @localhost 2.4.18-rmk-pxal-XSBASE]# make zImage[root @localhost 2.4.18-rmk-pxal-XSBASE]# cd arch/arm/boot/[root @localhost 2.4.18-rmk-pxal-XSBASE]# cp zImage /tftpD.启动mini终端。
XSBase255> boot[root @XSBASE /root]$ tfp 192.168.0.77ftp>cd /ftp>get /tftp/zImageE.这个时候在重启板子一下,板子就不能执行触摸屏上的鼠标操作了。
编译linux实验报告
编译Linux实验报告
在计算机科学领域,Linux操作系统一直被广泛使用。
它是一个开放源代码的操作系统,具有稳定性和安全性。
在本次实验中,我们将学习如何编译Linux内核,并撰写实验报告以记录我们的实验过程和结果。
实验目的:
1. 了解Linux内核的编译过程
2. 熟悉编译工具和技术
3. 掌握编译过程中可能遇到的问题和解决方法
实验步骤:
1. 下载Linux内核源代码
2. 解压源代码并配置编译环境
3. 使用make命令编译内核
4. 安装编译后的内核
5. 测试新内核的稳定性和功能
实验结果:
经过一系列的操作,我们成功地编译了Linux内核,并将其安装到我们的计算机上。
新内核的稳定性和功能得到了验证,证明我们的编译过程是成功的。
实验总结:
通过本次实验,我们不仅了解了Linux内核的编译过程,还学习了如何使用编译工具和技术。
在实验过程中,我们遇到了一些问题,但通过查阅资料和尝试不同的解决方法,最终成功地完成了编译过程。
这次实验为我们提供了宝贵的
经验,也增强了我们对Linux操作系统的理解和掌握。
总的来说,编译Linux内核的实验是一次有意义的学习过程,我们通过实践提升了自己的技能和知识水平。
希望在未来的学习和工作中,能够运用这些经验和技能,为我们的计算机科学之路增添更多的成就和贡献。
实验二M akefile实验【实验目的】1、了解makefile的概念和构成。
2、会使用GNU make编译一个或者多个文件。
3、掌握Makefile文件的编写。
【实验条件】1、VMware虚拟机。
2、Redhat Linux平台。
【实验内容与步骤】1、使用命令编译程序在这里通过vi编译器来创建两个文件hello.c和makefile。
[hello.c]* test make file* Emdoor*#include "stdio.h"main(){printf( "wellcom emdoor!\n");}[makefile]# test for makefileCC = gccCFLAGS =all : hellohello: hello.o$(CC) $(CFLAGS) hello.o -o hellohello.o: hello.c$(CC) $(CFLAGS) -c hello.c -o hello.o clean:在将上述Makefile文件与源文件hello.c保存到同一目录之后,就可以在命令行中输入“make”命令来编译整个项目了。
make在执行过程中,首先会查找到Makefile文件第一条规则中的目标,即上述文件中的all。
根据设定好的规则,该目标需要依赖于hello。
由于all并不是一个已经存在的文件,所以每次在make被调用的时候,显然都需要先检查hello。
继续往下不难发现,hello目标是依赖于hello.o。
当make处理到目标hello.o时,会先查看其对应的依赖对象,这个以来对象是hello.c,此时就会对hello.c进行编译,得到目标文件hello.o,然后是目标文件hello.o被连接,得到可执行文件hello。
先后执行如下命令:可以看到输出结果:在Makefile中,并不是所有的目标都对应于磁盘上的文件。
有的目标存在只是为了形成一条规则,从而完成特定的工作,并不生成新的目标文件,这样的目标称为伪目标。
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 开发环境,学会基于S3C2410 的Linux 开发环境的配置和使用。
使用Linux的armv4l-unknown-linux-gcc 编译,使用基于NFS 方式的下载调试,了解嵌入式开发的基本过程。
二、实验容本次实验使用Redhat Linux 9.0 操作系统环境,安装ARM-Linux 的开发库及编译器。
创建一个新目录,并在其中编写hello.c 和Makefile 文件。
学习在Linux 下的编程和编译过程,以及ARM 开发板的使用和开发环境的设置。
下载已经编译好的文件到目标开发板上运行。
三、实验设备及工具硬件::UP-TECH S2410/P270 DVP 嵌入式实验平台、PC 机Pentium 500 以上, 硬盘10G 以上。
软件:PC 机操作系统REDHAT LINUX 9.0+超级终端(或X-shell)+AMR-LINUX 开发环境。
四、实验步骤1、建立工作目录[rootlocalhost root]# mkdir hello[rootlocalhost root]# cd hello2、编写程序源代码我们可以是用下面的命令来编写hello.c的源代码,进入hello目录使用vi命令来编辑代码:[rootlocalhost hello]# vi hello.c按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按Esc 键进入命令状态,再用命令“:wq!”保存并退出。
这样我们便在当前目录下建立了一个名为hello.c的文件。
hello.c源程序:#include <stdio.h>int main() {char name[20];scanf(“%s”,name);printf(“hello %s”,name);return 0;}3、编写Makefile要使上面的hello.c程序能够运行,我们必须要编写一个Makefile文件,Makefile文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。
计算机科学系实验报告
课程名称Linux系统班级11软件2班实验名称grep、make命令及shell编程指导教师XXX
姓名123 学号123456 日期
一、实验目的
1.学习grep工具的使用, 能熟练使用grep进行文本搜索。
学习简单的正则表达式, 能在grep中使用正则表达式进行文本搜索。
二、学习make命令的使用, 能编写简单的Makefile文件。
三、 4. 学习shell编程,掌握的shell语法,能编写简单的shell脚本。
四、实验环境
Win7下vm虚拟机, Linux操作系统
五、实验内容
1.grep的使用
make命令的使用
shell编程
六、实验心得
对于这些命令, 一开始我很迷茫, 直到后面一个同学说直接在百度搜了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完成。
Linux驱动开发实验报告目录Linux驱动开发实验报告 (1)实验一、Linux内核移植实验 (3)1.1 资源 (3)1.2 解压源码包 (3)1.3 修改Makefile文件,支持交叉编译 (3)1.1 得到.config文件 (3)1.5 修改Nand Flash分区 (4)1.6 添加LCD支持 (5)1.7 添加网卡驱动 (6)1.8 添加YAFFS文件系统支持 (7)1.9 内核配置(即内核裁剪) (8)1.10 编译内核 (9)1.11 烧写内核 (10)实验二、ARM Norflash驱动实验 (10)2.1、环境 (10)2.2、目的 (11)2.3、实验步骤 (11)实验三、嵌入式linux驱动实验 (15)3.1、实验目的 (15)3.2、实验原理 (15)3.3、参考程序 (17)3.4、实验步骤 (25)3.5、实验结果 (30)3.6、实验体会 (30)实验四、LCD驱动实验 (30)4.1、实验目的 (30)4.2、实验设备(环境)及要求 (30)4.3、试验结果 (32)4.4、实验总结 (32)实验五、DM9000网卡驱动 (33)5.1、实验目的 (33)5.2、实验设备(环境)及要求 (33)5.3、实验内容与步骤 (33)5.4、试验结果 (35)5.5、实验总结 (35)实验一、Linux内核移植实验1.1 资源1.linux-2.6.24.1.tar.bz2 (Linux内核源码的压缩包,下载地址)2.yaffs2.tar.gz (yaffs文件系统源码的压缩包)3.dm9000.h和dm9000.c (dm9000网卡驱动程序)1.2 解压源码包1.在XP中,把“01/下午/src”文件夹拷贝到“//192.168.1.12”的共享文件夹uptech内,并把uptech中的“src”更名为“01 linux”2.在Linux虚拟机中进入该文件夹“cd /home/uptech/01 linux”ls可见1个文件:“linux-2.6.24.1.tar.bz2”、“yaffs2.tar.gz”、“dm9000.h”、“dm9000.c”◆bz2压缩包用“tar jxvf”解压◆gz压缩包用“tar zxvf”解压3.解压Linux源码压缩包,即输入命令“tar jxvf linux-2.6.21.1.tar.bz2”4.解压YAFFS源码压缩包,即输入命令“tar zxvf yaffs2.tar.gz”1.3 修改Makefile文件,支持交叉编译1.cd /home/uptech/01 linux/linux-2.6.21.2,该目录下就是linux的内核源码2.修改Makefile文件,使之支持交叉编译,也就是在Linux上编译出ARM开发板上运行的内核程序。
linux编程实验报告Linux编程实验报告一、引言Linux操作系统是一种自由开源的操作系统,具有稳定性、安全性和灵活性等优点,被广泛应用于服务器、嵌入式系统和个人电脑等领域。
本实验旨在通过编程实践,探索Linux编程的基本概念和技术,并通过实验结果验证相关理论。
二、实验目的本实验的主要目的是通过编写C语言程序,理解Linux系统调用的原理和使用方法。
具体目标包括:1. 熟悉Linux系统调用的概念和基本原理;2. 掌握Linux系统调用的常用函数及其使用方法;3. 理解文件操作、进程管理和网络编程等方面的基本知识。
三、实验环境本实验使用的实验环境为Ubuntu 20.04 LTS操作系统。
在该系统上,我们可以使用gcc编译器编译C语言程序,并通过终端执行程序。
四、实验内容1. 文件操作文件操作是Linux编程中的重要内容之一。
通过使用系统调用函数,我们可以实现对文件的读写、创建和删除等操作。
在本实验中,我们编写了一个简单的文件复制程序,实现将一个文件的内容复制到另一个文件中。
2. 进程管理进程是Linux系统中的基本执行单元。
通过创建和管理进程,我们可以实现并发执行和多任务处理等功能。
在本实验中,我们编写了一个简单的多进程程序,实现同时执行多个任务的效果。
3. 网络编程网络编程是Linux编程中的一个重要领域,它涉及到网络通信、套接字编程和网络协议等内容。
在本实验中,我们编写了一个简单的客户端-服务器程序,实现了基于TCP协议的网络通信。
五、实验结果与分析通过实验,我们成功编写了文件复制程序、多进程程序和客户端-服务器程序,并在实验环境中运行和测试了这些程序。
实验结果表明,我们对Linux编程的基本概念和技术有了初步的理解和掌握。
在文件复制程序中,我们使用了open、read和write等系统调用函数,实现了将源文件的内容复制到目标文件中。
通过实验测试,我们发现该程序能够正确地复制文件,保持了源文件的内容和结构。
中南大学Linux操作系统实验报告学生姓名学院信息科学与工程学院指导老师胡小龙专业班级完成时间目录1.实验一Linux的安装 (3)1.1 实验目的 (3)1.2 实验设备 (3)1.3 实验原理 (3)1.4 实验步骤 (3)2. 实验二Linux基本操作 (5)2.1 实验目的 (5)2.2 实验设备 (5)2.3 实验原理 (6)2.4 实验步骤 (6)3. 实验三Linux系统管理 (10)3.1 实验目的 (10)3.2 实验设备 (10)3.3 实验原理 (10)3.4 实验步骤 (11)4. 实验四Linux Shell程序设计 (14)4.1 实验目的 (14)4.2 实验设备 (14)4.3 实验原理 (15)4.4 实验步骤 (17)5. 实验五Linux 高级程序设计 (20)5.1 实验目的 (20)5.2 实验设备 (21)5.3 实验原理 (21)5.4 实验步骤 (21)6. 实验六Linux内核 (23)6.1 实验目的 (23)6.2 实验设备 (23)6.3 实验原理 (23)6.4 实验步骤 (23)Linux操作系统1.实验一Linux的安装1.1 实验目的(1)了解硬盘分区的概念和方法;(2)掌握硬盘的分区规划;(3)掌握Linux操作系统的安装和配置过程。
1.2 实验设备一台pc机、RedHat Linux 7.2以上版本、VMware Workstation v5.5。
1.3 实验原理Linux可以以多种方式安装在PC机上:(1)独立分区安装、(2)DOS分区安装和(3)虚拟机VMWare下安装。
鉴于VMware下安装对原来系统影响较小且不影响本实验目的,因此采用VMWare下安装方式。
1.4 实验步骤(1)在Windows XP下安装VMware 5.5(2)配置虚拟机(3)启动虚拟机(4)启动Linux安装过程(5)安装过程配置(6)安装后配置(7)第1次启动VMWare下Linux操作系统2.实验二Linux基本操作2.1 实验目的(1)复习Linux基本命令;(2)掌握常用Linux命令。
Linux操作系统课程实验报告班级:姓名:学号:指导老师:田丽华完成时间:2014年7月目录一、实验目的 (1)二、实验要求 (1)三、实验内容 (1)【第一题】 (1)【第二题】 (2)【第三题】 (4)【第四题】 (4)【第五题】 (5)【第六题】 (8)【第七题】 (12)【第八题】 (14)【第九题】 (15)四、实验过程中出现的问题及解决方法 (17)五、实验体会 (18)六、Linux系统安装报告 (18)一、实验目的熟练掌握Linux操作系统的使用,掌握Linux的各项系统管理功能,掌握Linux下各类网络服务的安装、配置以及使用,并能用shell脚本实现简单的管理任务。
二、实验要求完成实验内容并写出实验报告,报告应具有以下内容:1) 实验目的;2) 实验内容;3) 题目分析及基本设计过程分析;4) 配置文件关键修改处的说明及运行情况,应有必要的效果截图;5) 脚本源程序清单,包括详细注释;6) 实验过程中出现的问题及解决方法;7) 实验体会三、实验内容【第一题】在命令行新建几个用户,如tux,tom,lily等,给每个用户创建密码,并将这几个用户分到同一个组team中。
再新建一个组student,使得tux也为该组用户。
在root用户和新建用户之间切换,验证用户创建成功与否。
(给出相关命令运行结果)(5分)实验分析:这是一道基本的题目,老师上课所讲的创建用户以及创建小组的语句稍加应用便可以轻松完成题目。
创建用户时,用命令useradd,创建小组用groupadd,输密码时用passwd,这样就可以较为迅速完成实验题目。
实验中操作及其注释:[root@localhost ~]# groupadd teacher //添加小组teacher[root@localhost ~]# groupadd student //添加小组student[root@localhost ~]# useradd –g teacher –G student tux//添加用户tux,既属于小组teacher,也属于student[root@localhost ~]# passwd tux //为用户tux添加密码实验过程中出现的问题:这个实验题目比较基础,参照讲义和老师上课提到的方法可以完美解决这个问题,但是有些知识点有些生疏,所以出现一些小错误,不过很快就纠正了,影响不大。
Makefile两个实验实验⼗四Makefile⼯程管理器14.1 编写包含多⽂件的Makefile【实验内容】编写⼀个包含多⽂件的Makefile。
【实验⽬的】通过对包含多⽂件的Makefile的编写,熟悉各种形式的Makefile,并且进⼀步加深对Makefile中⽤户⾃定义变量、⾃动变量及预定义变量的理解。
【实验平台】PC机、CentOS 5 操作系统、gcc等⼯具。
【实验步骤】1.⽤vi在同⼀⽬录下编辑两个简单的Hello程序,如下所⽰:#hello.c#include "hello.h"int main(){printf("Hello everyone!\n");}#hello.h#include2.仍在同⼀⽬录下⽤vim编辑Makefile,不使⽤变量替换,⽤⼀个⽬标体实现(即直接将hello.c和hello.h编译成hello⽬标体)。
并⽤make验证所编写的Makefile是否正确。
3.将上述Makefile使⽤变量替换实现。
同样⽤make验证所编写的Makefile是否正确4.⽤编辑另⼀Makefile,取名为Makefile1,不使⽤变量替换,但⽤两个⽬标体实现(也就是⾸先将hello.c和hello.h编译为hello.o,再将hello.o编译为hello),再⽤make 的‘-f’选项验证这个Makefile1的正确性。
5.将上述Makefile1使⽤变量替换实现【详细步骤】1.⽤vi打开上述两个代码⽂件…hello.c?和…hello.h?2.在shell命令⾏中⽤gcc尝试编译,使⽤命令:…gcc hello.c -o hello?,并运⾏hello可执⾏⽂件查看结果。
3.删除此次编译的可执⾏⽂件:rm –rf hello4.⽤vim编辑Makefile,如下所⽰:hello:hello.c hello.hgcc hello.c -o hello5.退出保存,在shell中键⼊:make查看结果6.再次⽤vim打开Makefile,⽤变量进⾏替换,如下所⽰:OBJS :=hello.oCC :=gcchello:$(OBJS)$(CC) $^ -o $@7.退出保存,在shell中键⼊:make查看结果8.⽤vim编辑Makefile1,如下所⽰:hello:hello.ogcc hello.o -o hellohello.o:hello.c hello.hgcc -c hello.c -o hello.o9.退出保存,在shell中键⼊:make –f Makefile1查看结果10.再次⽤vi编辑Makefile1,如下所⽰:OBJS1 :=hello.oOBJS2 :=hello.c hello.hCC :=gcchello:$(OBJS1)$(CC) $^ -o $@$(OBJS1):$(OBJS2)$(CC) -c $< -o $@在这⾥请注意区别…$^?和…$11.退出保存,在shell中键⼊:make –f Makefile1查看结果14.2嵌套Makefile实验【实验⽬的】1、读懂makefile⽂件,能根据makefile⽂件理清程序结构2、能编写简单makefile3、掌握嵌套执⾏makefile【实验环境】PC机、CentOS 5 操作系统,gcc等⼯具。
LINUX移植和编译实验,实验六Linux内核移植实验.doc实验六Linux内核移植实验实验六 Linux内核移植实验⼀、实验⽬的1. 掌握交叉编译环境的建⽴和使⽤;2. 熟悉 Linux 开发环境,掌握 Linux 内核的配置和裁减;3. 了解 Linux 的启动过程。
⼆、实验环境预装Fedora10的pc机⼀台,CVT-A8系列实验箱$cd /opt/cvtech/kernel-s5pv210$make menuconfig如下图所⽰,在提⽰框中键⼊ config-s5pv210-b4y2 配置⽂件名,然后选择“Ok”确认,将退回到主菜单。
然后按“Esc”键退出,并将提⽰是否保存,请选择“Yes”保存。
2.编译:可以通过 make 或者 make zImage 进⾏编译,它们的差别在于 make zImage将 make ⽣成的核⼼进⾏压缩,并加⼊⼀段解压的启动代码,本实验采⽤ make zImage 编译。
$make zImage⽣成的 Linux 映像⽂件 zImage 保存在/opt/cvtech/kernel-s5pv210/arch/arm/boot/⽬录下。
5. 下载 Linux 核⼼并运⾏编译成功后的 Linux 核⼼为/opt/cvtech/kernel-s5pv210/arch/arm/boot/zImage。
通过 u-boot将该核⼼ zImage 下载到 SDRAM 中。
具体步骤:1. 编译 Linux 核⼼;$cd /opt/cvtech/kernel-s5pv210$make menuconfig选择“Load an Alternate Configuration File”,加载 config-s5pv210-b4y2 配置⽂件,保存并退出。
$make zImage编译成功后,拷贝 zImage 到下载⽬录$cp /opt/cvtech/kernel-s5pv210/arch/arm/boot/zImage /mnt/hgfs/share2. 下载 Linux 核⼼并运⾏。
实验六Linux内核编译讲师:杨行【实验目的】1、掌握Linux内核编译2、了解Linux内核Makefile3、了解Linux内核Kbuild系统【实验原理】网站可以下载标准内核文件;本次实验使用的内核源码详见,ARM裸板驱动开发课程所发的arm_linux文件夹;一、编译内核1 内核源码目录分析2 内核编译主要过程;du -hs linux-2.6.32.2.tar.gztar xzvf linux-2.6.32.2-mini2440-20130614.tar.gz -C /find -name "*" | wc –ltreecp config_mini2440_w35 .configmake menuconfigmake zImage3 编译主要过程讲解将所有目标连接为:LD vmlinux去除vmlinux生成纯二进制文件OBJCOPY arch/arm/boot/Image提示镜像文件编译生成Image Kernel: arch/arm/boot/Image is ready汇编编译程序启动头AS arch/arm/boot/compressed/head.o 压缩源码Image:GZIP arch/arm/boot/compressed/piggy.gz 汇编编译产生压缩程序AS arch/arm/boot/compressed/piggy.o 链接LD arch/arm/boot/compressed/vmlinux 纯二进制文件生成:OBJCOPY arch/arm/boot/zImage最终生成:Kernel: arch/arm/boot/zImage is ready/linux-2.6.32.2/arch/arm/boot$ du -hs Image/linux-2.6.32.2/arch/arm/boot$ du -hs zImage4 运行内核copy zImage 到tftpboot目录中;tftp 下载zImage到0到0x30008000地址后;使用bootm 0x30008000 启动内核;查看内核是否可以正常启动;未能启动内核的原因有两种:第一种:未配置网络文件系统;第二种:未正确设置u-boot启动参数;4.1 配置nfs文件系统1. sudo apt-get install nfs-kernel-server2. sudo vim /etc/exports+/nfsroot *(rw,sync,no_root_squash)3. sudo /etc/init.d/portmap restart4. sudo /etc/init.d/nfs-kernel-server restart5. showmount –e切换到/home/spring/arm_linux/mini2440/src目录下:6 sudo tar xvf nfsroot.tar -C /4.2 设置u-boot的启动参数在u-boot命令行模式下:set bootargs root=/dev/nfs rw nfsroot=192.168.0.1:/nfsroot ip=192.168.0.230 console=ttySAC0,115200save5 编写测试程序hello.c#include<stdio.h>int main(){ printf("hello world!\n");while(1);}5.1 在PC机上面编译hello.carm-linux-gcc –c helo.c –o hello.oarm-linux-gcc hello.o –o hellocp hello /nfsroot5.2 在mini2440平台上后台运行hello,并使用命令杀死hello进程/sq1415 # lshello/sq1415 # ./hello &/sq1415 # hello world!/sq1415 #/sq1415 # ps -a |grep hello729 0 0:50 ./hello731 0 0:00 grep hello/sq1415 # kill -9 729/sq1415 # jobs[1]+ Killed ./hello/sq1415 #6.设置自启动参数set bootcmd tftp 0x30008000 zImage\; bootm 0x30008000save二、内核Makefile分析1. 查看fs/Makefile 文件Var = deferred 延时变量Var ?= deferred 延时变量Var := immediate 立即变量Var += deferred or immediate延时变量:在使用时才确定变量的值立即变量:在定义时已确定变量的值2.查看顶层Makefile文件顶层Makefile文件通过include包含子目录中的Makefile文件$(srctree)代表的是当前源码路径3 Makefile文件中包含auto.config 文件:一般配置变量是在auto.conf文件中定义;4 查看arch/arm/Makefile 文件分析顶层Makefile中SRCARCH=ARCH=arm所以该Makefile 将产生arm架构的编译过程;5 make zImage 编译过程分析5.1 首先我们在顶层Makefile文件中查找zImage文件结果是查找不到在Image目标5.2 在arch/arm/Makefile 中查找在zImage,结果是在zImage依赖于vmlinux 5.3 在arch/arm/Makefile 中查找zImage,未找到vmlinux: 目标5.4 在顶层Makefile 中查找vmlinux:5.5 在顶层Makefile中依次查找vmlinux-lds、vmlinux-init、vmlinux-main、vmlinux.o、kallsyms.o5.5.1 查找vmlinux-init的依赖:5.5.1.1 查找head-y的依赖:5.5.1.2 查找init-y的依赖:继续查找:$(patsubst %/, %/built-in.o, $(init-y))该函数实现在init-y变量中的所有带有/路径之后添加built-in.o 则。
1 概述Makefile由五个部分组成:∙Makefile:根目录Makefile,它读取.config文件,并负责创建vmlinux(内核镜像)和modules(模块文件)。
∙.config:内核配置文件(一般由make menuconfig生成)。
∙arch/$(ARCH)/Makefile:目标处理器的Makefile。
∙scripts/Makefile.*:所有kbuild Makefile的规则,它们包含了定义/规则等。
∙kbuild Makefiles:每个子目录都有kbuild Makefile,它们负责生成built-in或模块化目标。
(注意:kbuild Makefile是指使用kbuild结构的Makefile,内核中的大多数Makefile 都是kbuild Makefile。
)2 kbuild文件2.1 obj-y和obj-m最简单的kbuild Makefile可以仅包含:$(EXTRA_LDFLAGS)和$(EXTRA_ARFLAGS)用于每个目录de$(LD)和$(AR)选项。
例如:#arch/m68k/fpsp040/MakefileEXTRA_LDFLAGS := -xCFLAGS_$@, AFLAGS_$@CFLAGS_$@和AFLAGS_$@只使用到当前makefile文件de命令中。
$(CFLAGS_$@)定义了使用$(CC)de每个文件de选项。
$@部分代表该文件。
例如:# drivers/scsi/MakefileCFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONFCFLAGS_gdth.o = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \-DGDTH_STATISTICS CFLAGS_seagate.o = -DARBITRATE -DPARITY-DSEAGATE_USE_ASM这三行定义了aha152x.o、gdth.o和seagate.o文件de编译选项。
嵌入式系统实验报告(一)--linux内核配置和编译138352019陈霖坤一实验目的了解嵌入式系统的开发环境,内核的下载和启动过程;了解linux内核源代码的目录结构及各目录的相关内容;了解linux内核各配置选项内容和作业;掌握linux内核的编译过程。
二实验内容与要求配置一个完整的内核,尽可能理解配置选项在操作系统中的作用;将编译的内核文件复制到tftp服务器目录,在目标机中下载并运行。
三环境介绍1交叉编译器PC使用的CPU架构一般为X86架构,实验板采用的处理器是基于Cortex-A8的S5PV210,为ARM内核,所以在PC上能运行的程序在实验板上不能运行,需要用能适用于ARM核心的编译器进行编译,即交叉编译。
本实验所用交叉编译工具链为arm-2009q3,使用时需添加路径export PATH=$PATH:$(TOOLCHAINPATH)/bin/,PATH 为环境变量,在终端中输入命令时系统会根据PATH指定的路径查找,添加的目录下有arm-none-gnueabi-gcc,即我们需要用到的编译器。
2minicomminicom是linux系统中常用的串口调试工具,对应的,windows下有超级终端,或者串口调试助手一类的软件。
串口通信即利用异步串行接口(UART)进行通信,利用TXD和RXD可实现全双工通信。
PC常用的为9针接口,笔记本没有专门串口可利用USB转换,通信标准为RS232。
在终端输入minicom打开软件,Ctrl+A-O进入设置界面。
Serial Device选择通信端口,可以先查看系统中哪个设备是活动的再选择,如果连接线与端口选择不对应会出现无法通信的情况。
对笔记本使用USB转串口一般都以ttyS0挂载。
串口参数选择1152008N1,即波特率115200bps,八位数据位,无校验位,一位停止位。
硬件软件控制流都选择NO。
保存后给开发板上电可以看到从串口打印出的信息。
操作系统实验报告
姓名:学号:
一、实验题目
1.编译linux内核
2.使用autoconf和automake工具为project工程自动生成Makefile,并测试
3.在内核中添加一个模块
二、实验目的
1.了解一些命令提示符,也里了解一些linux系统的操作。
2.练习使用autoconf和automake工具自动生成Makefile,使同学们了解Makefile的生成原理,熟悉linux编程开发环境
三、实验要求
1使用静态库编译链接swap.c,同时使用动态库编译链接myadd.c。
可运行程序生成在src/main目录下。
2要求独立完成,按时提交
四、设计思路和流程图(如:包括主要数据结构及其说明、测试数据的设计及测试结果分析)
1.Makefile的流程图:
2.内核的编译基本操作
1.在ubuntu环境下获取内核源码
2.解压内核源码用命令符:tar xvf linux-
3.18.12.tar.xz
3.配置内核特性:make allnoconfig
4.编译内核:make
5.安装内核:make install
6.测试:cat/boot/grub/grub.conf
7.重启系统:sudo reboot,看是否成功的安装上了内核
8.详情及结构见附录
3.生成makefile文件:
1.用老师给的projec里的main.c函数。
2.需要使用automake和autoconf两个工具,所以用命令符:sudo apt-get install autoconf 进行安装。
3.进入主函数所在目录执行命令:autoscan,这时会在目录下生成两个文件 autoscan.log和configure.scan,将configure.Scan改名为configure.ac,同时用gedit打开,打开后文件修改后的如下:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE(main,1.0)
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT(Makefile)
4.新建Makefile文件,如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=main
first_SOURCES=main.c
5.运行命令aclocal
命令成功之后,在目录下会产生aclocal.m4和autom4te.cache两个文件。
6.运行命令autoheader
命令成功之后,会在目录下产生config.h.in这个新文件。
7.运行命令autoconf
命令成功之后,会在目录下产生configure这个新文件。
8.运行命令automake --add-missing输出结果为:
Configure.ac:11:installing./compile’
Configure.ac:8:installing ‘.install-sh’
Configure.ac:8:installing ‘./missing’
Makefile.am:installing ‘./decomp’
9. 命令成功之后,会在目录下产生depcomp,install-sh和missing这三个新文件和执行下一步的Makefile.in文件。
10.运行命令./configure就可以自动生成Makefile。
4.添加内核模块
1.写一个c文件如下:
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
int __init hello_init (void)
{
printk("Hello xuxuemei\n");
printk("Hello xuxuemei\n");
printk("Hello xuxuemei\n");
return 0;
}
void __exit hello_exit (void)
{
printk("Hello linux exit\n");
printk("Byebye xuxuemei\n");
}
module_init(hello_init);
module_exit(hello_exit);
2输入 sudo make –C /lilb/modules/$(uname -r)/build M=$(pwd)命令符,生成hello.ko等文件
3.输入命令符:sudo insmod ./hello.ko,加入模块
4.输入命令符:Sudo rmmod hello,删除模块
5输入命令符:tail/var/log/kern.log,查看模块添加情况,如果c文件里的输出都能正常输出的话,说明添加成功。
五、实验体会(如:包括实验中遇到的问题及解决过程、产生的错误及原因分析)
1.在试验中遇到了好多问问题,光ubuntu就装了3遍,其中有一次是编译完内核之后再重启ububtu然后就重启不了了,然后把它卸了重装,重装之后发现又不能联网,然后又重装一遍,发现才可以用。
2.编译内核的过程中,出现了好多问题,下载内核的过程中下载了好几次才下载成功,我一共编译
3.19.,3.18,3.14 这些版本的内核,但是3.19版本的编译时出了错误,也不知道要怎么修改,所以就放弃了,然后编译3.18版本的,编译完成后发现安装不了,然后又编译了3.14,但是配置内核特性的时候又出现了问题。
最后又重新编译了3.18,最后才正确。
3.在生成makefile的过程中,也出现了一些问题,首先就是没有生成alocal.m4文件,然后到最后我才发现原来是那个第一次生成的文件configure.ac需要修改,修改之后就对了。
4.在添加内核模块时也出现了错误,只是那些错误是命令符输入错误的问题。
六、程序清单(如:包括源程序、makefile、readme)
见上面。
七.图片(见附录)
附录:
1.编译内核:
2.生成makefile的结果:
3.添加内核模块。