null第八讲 嵌入式Linux交叉编译环境第八讲 嵌入式Linux交叉编译环境电信学院 崔寅鸣
Email: ymcui@scut.edu.cn主要
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
主要内容综述
Redhat9.0虚拟机环境的建立与配置
交叉编译工具ToolChain的建立
Bootloader编译
Kernel编译
Root-disk编译
Gdbserver 远程调试(选读)
怎么搭建开发环境?怎么搭建开发环境?主机
安装Linux操作系统(本系统采用虚拟机Redhat9.0)
在Linux下安装交叉编译工具链
开发板
建立eLinux操作系统(主机是Windows或Linux均可)交叉编译环境交叉编译环境嵌入式系统的开发需要宿主机(Host pc),因为嵌入式系统一般没有大容量的存储设备。
由于host pc的处理器与嵌入式微处理器通常不同,为了生成能够在嵌入式系统中运行的代码,需要进行交叉编译。
交叉编译:在宿主机(x86)上编译可以在目标系统(ARM)上运行的二进制文件。交叉编译环境交叉编译环境开发板是嵌入式Linux操作系统,故交叉编译环境要求在主机的Linux操作系统下建立
本系统交叉编译环境,是在主机的Redhat 9.0 Linux操作系统下建立。
Linux主机Linux主机本系统要求主机的环境是Redhat 9.0 Linux操作系统,基本上可以有两种方法来建立:
建立独立的主机Redhat Linux操作系统
在Window下,利用虚拟机管理软件,建立一个可以在Windows启用和管理的虚拟Redhat Linux操作系统(本系统采用)why虚拟机Linux?why虚拟机Linux?采用虚拟机,有如下原因和方便:
虚拟机也能够控制系统硬件
完全能够满足交叉编译环境需要
方便与Windows系统进行切换
使用Windows下文件来作为硬盘空间,相对于双系统,不需复杂的硬盘分区
虚拟机在Windows下,是几个文件,方便备份和恢复
在本实验系统中,Windows系统和Redhat系统都必不可少,虚拟机比较方便null第一部分 Redhat9.0 虚拟机本系统软件环境本系统软件环境在windows系统下,安装vmware软件
该软件是一个虚拟机系统的管理软件,可以方便地建立和配置虚拟机
null建立新的虚拟机(实验室已建)建立新的虚拟机(实验室已建)直接点击“new virtual machine”建立新的虚拟机(实验室已建)建立新的虚拟机(实验室已建)选择安装文件建立新的虚拟机(实验室已建)建立新的虚拟机(实验室已建)选择操作系统类型建立新的虚拟机(实验室已建)建立新的虚拟机(实验室已建)选择虚拟机在硬盘的保存目录建立新的虚拟机(实验室已建)建立新的虚拟机(实验室已建)选择虚拟机占用硬盘空间大小,以文件形式建立新的虚拟机(实验室已建)建立新的虚拟机(实验室已建)注意在安装过程中,虚拟机硬盘分区:
100M大小的boot区
2倍RAM大小的SWAP区
剩下为根文件系统挂载区(常用ext3文件系统)null安装完毕启动安装完毕启动登录系统登录系统本系统用户本系统用户超级管理员
用户名root,密码eescut
普通用户
用户名emb,密码embedded进入系统进入系统全屏与释放鼠标全屏与释放鼠标全屏方式
按Ctrl+Alt+Enter
释放鼠标到windows
Ctrl+Alt启用终端启用终端启用终端启用终端为虚拟机添加服务为虚拟机添加服务ftp与telnet服务ftp与telnet服务ftp——文件传输协议;Linux开此服务以方便通过网络来传输文件
须启用vsftpd服务
telnet——远程登录协议;方便通过远程来登录Linux系统
须启用xinetd服务和telnet服务ftp与telnet服务ftp与telnet服务ftp服务配置ftp服务配置启用ftp服务,还需要修改配置文件
/etc/vsftpd.ftpusers
/etc/vsftpd.user_list
这两个文件中列出的用户,会被禁止使用ftp服务;将不希望被禁止的删除即可,如root用户虚拟机的设置虚拟机的设置虚拟机的设置虚拟机的设置虚拟机的设置虚拟机的设置可以配置虚拟机现有硬件,或添加新的硬件
硬盘(本地硬盘在Windows和Linux互访)
网络(实现Linux虚拟机上网)
串口(用于Linux主机与开发板通信)保持连接保持连接保持连接保持连接如果虚拟机想使用网络或串口,必须保证前页中connected
串口是独占性资源,windows与Linux虚拟机同时只能有一个使用虚拟机的网络设置虚拟机的网络设置网络有三种方式
Bridged(桥接)——虚拟机分配静态IP,直接连到局域网,与windows主机地位相同,相当于独立主机
NAT(地址解析协议)——虚拟机与Windows主机组成局域网,并通过Windows主机来访问外网
Host-only——仅与主机通信,适合于没有网卡等情况
虚拟机的网络设置虚拟机的网络设置虚拟机的网络设置虚拟机的网络设置本系统为方便进行gdb远程调试,采用了Bridged(桥接)方式。虚拟机IP统一配置为218.192.169.239,为避免IP冲突,在可访问外网时,不要启动虚拟机。
虚拟机仅供与实验箱直联,编译调试程序时使用。Bridged方式IP配置Bridged方式IP配置设置好网络方式是Bridged后,类似与windows主机的网络设置
设置IP(与windows主机同网段)
设置网关(同windows主机)
设置DNS(同windows主机)虚拟机中网络设置虚拟机中网络设置虚拟机中网络设置虚拟机中网络设置虚拟机中网络设置虚拟机中网络设置需要设置内容
IP
网关
DNS
设置好后,可以解除网卡eth0,然后再激活,来使新IP生效
当前IP设置,可用ifconfig命令查看虚拟机中网络设置虚拟机中网络设置用ifconfig命令查看当前网络设置NAT或Host-only的IP配置NAT或Host-only的IP配置例:NAT网络配置例:NAT网络配置此页为NAT网关,在vmware软件菜单中例:NAT网络配置例:NAT网络配置Windows中,用ipconfig /all 来查看vnet8例:NAT网络配置例:NAT网络配置本例中的配置
网关192.168.254.2
Windows vnet8 192.168.254.1 ,是虚拟机访问外网的出口
Linux 虚拟机需设置:
IP = 192.168.254.xxx
Mask=255.255.255.0
gateway=192.168.254.2
DNS=192.168.254.2null第二部分 交叉编译环境交叉编译环境交叉编译环境一般包括:
Gcc编译器,for c,c++
Binutil,一些辅助工具,包括objdump(可反编译二进制文件)、as(汇编器)、ld(链接器)等
Glibc,提供系统调用和基本函数的c库
C header
Gdb调试器本系统交叉编译环境的建立本系统交叉编译环境的建立以root用户登陆linux系统
创建/XSBase270目录
上传EELiod Linux2.5到上述目录
拷贝 cp /XSBase270/ToolChain/xscalev1_010001.tar.gz /opt
解压工具包:
cd /opt
tar xvfz xscalev1_010001.tar.gz
进入/opt/xcalev1/bin,可见下列编译工具
(注意:实验室已建,不要重复建立)null本系统交叉编译环境的建立本系统交叉编译环境的建立设置PATH环境变量
在用户(root用户或其他用户)根目录下,打开.bash_profile,添加环境变量如下:
PATH=$PATH:/opt/xscale1/bin
使用source 命令使上述变量有效
#source ~/.bash_profilenullHelloworld例程Helloworld例程#include
int main(void)
{
int i;
for(i=0;i<10;i++)
printf("hello world! i=%d \n",i);
return 0;
}HelloWorld例程HelloWorld例程生成helloworld.c
执行gcc –o hello helloworld.c
执行arm-linux-gcc –o hello-arm helloworld.c
用file命令分别查看
#file hello
#file hello-armMakefile简介Makefile简介Linux开发一般有大量源代码,为了避免大量重复的键入gcc进行编译,定义了Makefile文件,用于自动编译
# make 该操作会调用Makefile
Makefile一般定义了:
Gcc编译工具
编译命令
目标文件
依赖关系
Makefile简介Makefile简介例:
test.o: test.c test.h
gcc –g –o test.o test.c
-g 生成调试信息
-c 只编译不链接成为可执行文件
-o 确定输出文件名称
-O 优化
-w 禁止警告信息
-Wall 打开所有类型警告信息
Makefile变量Makefile变量makefile 变量-预定义变量
$* 不包含扩展名的目标文件名
$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。
$< 第一个依赖文件的名称
$? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。
$@ 目标的完整名称。
$^ 所有的依赖文件,以空格分开,不包含重复的依赖文件。
简单Make指令说明简单Make指令说明# Make clean ——清除编译过程的中间文件
# make dep ——设置Makefile文件中各个目标所依赖的文件列
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
简单例makefile简单例makefileCC=arm-linux-gcc
all:hello-arm
hello-arm:hello.c
$(CC) -Wall -g -o hello-arm hello.c
clean:
rm -f hello-arm参考参考请参考Linux上级实验2“Makefile实验”Bootloader源代码编译Bootloader源代码编译进入/XSBase270/Bootloader
解压tar xvfz Boot-XSBase270_010005.tar.gz
进入解压后的./Boot-XSBase270目录
执行make,生成boot文件nullKernel源代码编译Kernel源代码编译进入目录/XSBase270/Kernel
解压tar xvfz linux-2.4.21-51Board_EDR.tar.gz
进入上步生成的目录linux-2.4.21-51Board_EDR
make xsbase270_config
make oldconfig
make menuconfig进行选项配置
make dep 生成文件依赖关系
make zImageMenuconfigMenuconfignull见“内核编译实验.pdf”根文件系统编译根文件系统编译进入目录/XSBase270/Filesystem
(以带QT的文件系统为例)解压
tar xvfz eeliod_2.4_qt_rootfs.tar.gz 生成rootfs270目录
使mkfs.jffs2可执行:
chmod +x ./mkfs.jffs2
执行事先编辑好的Shell命令
sh ./mkrootfs.sh
会在当前目录生成rootfs270.imgnullnull第三部分 Gdbserver 远程调试概述概述Gdb 是GNU在Linux平台下调试工具
Gdb & gdbserver:目标板运行gdbserver,主机运行gdb进行调试。需要:
Gdb要针对ARM平台配置后,重新编译。运行于主机。
Gdbserver需要用arm-linux-gcc重新编译。因为其运行于目标机上。
Gdb源码:http://ftp.gnu.org/gun/gdb/ (服务器上面已有)
概述概述Gdb & gdbserver可以通过网络或者串口来调试
内核模块,可以采用printk打印输出信息的方式来进行调试。例如在设备驱动程序中。
Gdb只适合于应用程序。 Gdbserver+gdb的重新编译 Gdbserver+gdb的重新编译 重新编译gdb:
ftp传输gdb-6.5.tar.gz到/root/gdb下
#tar xvfz gdb-6.5.tar.gz
#cd gdb-6.5
#./configure --target=arm-linux
(会生成Makefiel)
#make
#make install
(此时arm-linux-gdb应该可用,在目录/usr/local/bin 下) 编译gdbserver 编译gdbserver #cd /root/gdb/gdb-6.5/gdb/gdbserver
#./configure --target=arm-linux --host=arm-linux
(如果执行时找不到arm-linux-gcc,请检查交叉编译环境是否建立好。应该在/opt/xscalev1/bin下)
(会生成Makefile)
#make CC=/opt/xscalev1/bin/arm-linux-gcc
(会生成gdbserver。可以用file gdbserver来查看文件是否是ARM平台文件)
#make install Gdb & gdbserver 调试 Gdb & gdbserver 调试 下面以一个hello-arm的应用程序为例。该例程在redhat中由交叉编译生成。
(由C文件和makefile文件构成的简单例程,用arm-linux-gcc –g 编译,带调试信息) Gdb & gdbserver 调试Gdb & gdbserver 调试在minicom的目标板端口,用FTP协议下载gdbserver和hello-arm到目标板
#ftp 218.192.170.242
会要求输入用户名和密码。输入后会显示正确登录。
ftp> cd 到gdbserver文件所在目录
ftp> get gdbserver
ftp> cd 到hello-arm文件所在目录
ftp> get hello-arm
ftp> bye Gdb & gdbserver 调试Gdb & gdbserver 调试在目标板启动gdbserver,运行应用程序
#chmod +x ./gdbserver (给可执行权限)
#chmod +x ./hello-arm
#./gdbserver 218.192.170.100:1234 ./hello-arm
会显示如下提示信息:
Process hello-arm created: PID=xxx
Listening on port 1234 Gdb & gdbserver 调试Gdb & gdbserver 调试在主机启动arm-linux-gdb进行远程调试:
#cd 到hello-arm所在目录
#arm-linux-gdb ./hello-arm
可看到如下提示信息:
This GDB was configured as “--host=i386-pc-linux-gnu --target=arm-linux”…
#(gdb)
此时输入
#(gdb)target remote 218.192.170.100:1234
会提示:Remote debugging using 218.192.170.100:1234
#(gdb)
进入GDB调试过程。
此时在目标板有响应信息:Remote debugging from host 218.192.170.242 课后学习课后学习有条件同学自己安装虚拟机
阅读
EELiod Linux使用手册
实验一 常用命令及工具实验
实验二 Makefile实验
实验三 Bootloader实验
实验四 内核编译实验
实验五 文件系统制作实验练习练习在windows主机用ftp连接虚拟机Redhat系统,进行文件传输
在windows主机telnet登陆虚拟机Redhat系统,进行指令操作
编写简单应用程序和makefile,并运行得到结果
试建立gdbserver调试环境,进行上述应用程序调试
练习使用minicomnull