Ubuntu下搭建嵌入式环境
一.minicom的安装
(1)打开终端,输入:
sudo apt-get install minicom
(2)然后进行配置,输入
sudo minicom -s
(3)进入Serial port setup,需要修改两处:
1>A中 /dev/tty8改为/dev/ttyS0
注意:如果为笔记本没有串口,可以用usb转串口工具,此时要
改为/dev/ttyUSB0
(也许你的不一样,可以在/dev下查看)
2>波特率设备为115200,硬件流和控制流端口设为No
3>回车退回到刚进入时的界面,选择save setup as dfl。
(4)启动minicom
在终端输入命令:minicom,进入到minicom界面,如果主机跟开发板连接,这时如果按下板子的启动键,则在minicom界面中会看到整个加载的过程。系统启动完成后,minicom就相当与板子的一个终端,它可以对板子进行一些命令操作。
<!--@page { margin: 2cm }P { margin-bottom: 0.21cm }-->
(5)正常关闭minicom的方法是在终端里面输入:CTRL+A,然后再输入Q,这样才可以做到正常关闭minicom,
注:
非正常关闭minicom,会在/var/lock下创建几个文件LCK*,这几个文件阻止了minicom的运行,将它们删除后即可恢复
二.tftp的安装:
(1)进入终端,输入:
sudo apt-get install tftp-hpa tftpd-hpa
第一个是客户端,第二个是服务器端
(2)sudo apt-get install xinetd
这是一个tftp传输所基于的协议
(3)配置
1>cd /etc/xinetd.d/
修改配置tftp,如果没有就新建一个
2>输入:sudo gedit tftp
将内容修该如下:
service tftp
{
socket_type = dgram
wait = yes
disable = no
user = root
protocol = udp
server = /usr/sbin/in.tftpd
server_args = -s/home/tftpboot
log_on_success += PID HOST DURATION
log_on_failure +=HOST
}
3> 安装完成后,默认的服务器路径是 /var/lib/tftpboot/,以后目标机需要通过tftp获取文件时,都是从这个目录中获得
(4)重新启动服务器
sudo /etc/init.d/xinetd reload
sudo /etc/init.d/xinetd restart
(in 3.2.0 linux kernel, change from above two instructions to "sudo service xinetd reload ; sudo service xinetd restart" instead of above )
(5)测试:
1>首先在tftp服务器目录下随便新建一个文件
touch tiger.c
2>然后随便进入到其他目录下,输入命令:
sudo tftp localhost.
3>这时会出现tftp命令行,输入命令
get tiger.c
该意思是在localhost下,也就是访问本机中tftp服务器,获取文件tiger.c,若服务器没问题,则在该目录下会多出来一个刚才获得的文件a.c,这时就说明我们所安装的tftp服务器可以正常使用。
注意:
如果出现超时提示,一般都是防火墙的原因,所以要把防火墙关闭,或者直接卸载防火墙。输入:
sudo apt-get remove iptables
三nfs的安装:
(1)安装软件,输入:
sudo apt-get install nfs-kernel-server
(2)进入/etc目录下,修改配置文件exports
1>如果没有就新建一个:
sudo gedit exports
2>添加一句话:
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
/home/think/test *(rw,sync,no_root_squash)
-------------------------------------------------------------------------------------
说明:
a.前面的目录是设置你想要共享的主机里的某个目录,此处将/home/think/test共享出现,
b.后面的*是设置允许那一段IP访问,这里的*代表任意ip段,也可以改为下面
/home/think/test 192.168.0.*(rw,sync,no_root_squash)
c.括号里面的参数
第一个参数:读写
第二个参数:同步
第三个参数:权限
a.no_root_squash: 登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有root 的权限!这个项目极不安全,不建议使用!
b.root_squash: 在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个身份。
c.all_squash: 不论登入 NFS 的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是 nobody
d. anonuid: 前面关于 *_squash 提到的匿名使用者的 UID 设定值,通常为 nobody,但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中!
e.anongid: 同 anonuid ,但是变成 group ID 就是了。
(3)重新启动服务器
1>sudo exportfs -rv
重新导入配置文件
2>重新启动portmap服务(端口映射):sudo /etc/init.d/portmap restart
3>sudo /etc/init.d/nfs-kernel-server restart 重启nfs服务
(4)使用nfs
a.使用mount指令,让共享的文件夹挂载到一个指定目录下。
b.在使用nfs服务之前,还需要启动portmap服务,就是在你想要挂载东西的平台上,输入 portmap&,启动portmap服务。
c.自测
输入:
mount -t nfs 192.168.1.100:/home/think/test /mnt
如果没有提示就说明挂在成功。如果想要与开发板进行nfs传输,则在开发板的Linux系统下的终端中输入: mount -t nfs 192.168.1.100:/home/think/test /mnt -o nolock 完成挂载,进入/mnt目录会发现在PC机中/home/think/test中的东西显示出来了。
四.交叉工具链和安装:
1.安装:
每个开发板配套的都不一样,所以建议安装开发板中的交叉工具。
2.为了方便使用,还需要将交叉编译器路径添加到系统路径中
(1)在~/目录下新建一个文件.bash_profile(注意:.a文件是一个隐藏文件)
在文件中添加一句话:
PATH=$PATH:/home/think/4.3.3/bin
这句话添加了交叉编译器安装路径。
(2)要使编译器能用,必须运行。
运行.bash_profile文件的方法是:
a. cd~/
b .输入命令:. .bash_proble(点+空格.bash_profile)
运行命令后,在终端输入命令:arm-vfp-linux-gnu-并按两下tab键如果能看到很多arm-vfp-linux-gnu-前缀的命令,则说明安装正确。
注意:每次打开一个新的终端,都要运行一次.bash_profile文件
上面的方法每开一个新的终端都要运行一次.bash_profile过于麻烦:
我们可以直接在
用户主目录下有一个.bashrc文件,可以在此文件中加入PATH 的设置如下:
export PATH=$PATH:/home/think/4.3.3/bin
编写好后,注销以下我们就把交叉编译环境写入了环境变量中
(可以用echo $PATH来查看是否加入成功),这样以后每次都不用运行就可以直接使用交叉编译环境了
在编译程序时就不能在用gcc而要用arm-linux-gcc
c.每次都要用arm-linux-gcc命令过于麻烦,因此我们写一个Makefile
以后只要用make命令就OK了
1 EXEC=xxx
2 OBJS=xxx.o
3 SRC=xxx.c
4
5 CC=arm-linux-gcc
6 CFLAGS +=-O2 -Wall
7 LDFLAGS +=
8
9
10 all:$(EXEC)
11
12 $(EXEC):$(OBJS)
13 $(CC) $(LDFLAGS) -o $@ $(OBJS)
14
15 %.o:%.c
16 $(CC) $(CFLAGS) -c $< -o $@
17 clean:
18 @rm -vf $(EXEC) *.o *~