本周学习概况总结:
●在windows 下安装虚拟机 ,运行linux 操作系统。
linux下一些简单的基本操作命令的学习,入mv、cp、cd、ls等。
了解linux各目录文件的作用。
vi 文本编辑器的使用。
gcc 编译器的使用。
gdb 调试器的使用。
GNU make的使用。
嵌入式开发环境的搭建,包括:往裸机烧写系统,搭建samba服务器,nfs 服务器 。
Shell编程:变量与变量的设定,条件测试,控制结构
细节如下:
嵌入式开发环境的搭建:
● 建立samba服务器,实现windows 和linux下文件的交互
建立目的:用户习惯在windows 下工作,可以先在windows 下先完成程序的编写,调试,运行,再移植到linux 下 。
具体建立:
1 在VMware下选“编辑虚拟机设置”----:“选项”---“共享文件夹”
窗口右侧选上l“linux”—版本选‘“red hat linux”,在“工作目录”下选择要交互的文件
---确定;
2 打开虚拟机的 主菜单——系统设置-——服务器设置——服务,打开服务配置窗口,选中smb选项;
3 打开虚拟机的 主菜单——系统设置-——服务器设置——Samba服务器,打开 Samba服务器配置 窗口,选择“增加”选项 把要交互的文件添加进来,在“首选项”里设置可访问的用户,权限,口令等;
4 打开终端,输入命令 sutup ,选则“Firewall configuration”,选中“No Firewall”;
5 在终端下输入ifconfig eth0 ,记下虚拟机的ip地址,也可通过ifconfig eth0 192.168.*.*,手动设置ip;
6 终端下键入命令 service smb restart ;
7 在windows 下 运行 //192.168.*.* ,即可访问共享的文件;
8 在linux 下 ,输入 /mnt/hgfs/* 可访问共享的文件。
注意:虚拟机与windows 的ip地址不要设置成同样。Windows 的防火墙可能存在影响。
建立 nfs 服务器 ,实现 linux 与 目标板的互联
建立的目的: 由于目标机的cpu ,内存等方面比较弱,需要在linux 下先编译好程序,之后直接移植到目标机上运行,所以两者需要建立连接,连接好之后也可实现对目标机的远程调试。
具体建立;
1 准备好烧好系统的目标机,用网线把目标机与pc机连接好
2 打开虚拟机的 主菜单——系统设置-——服务器设置——服务,打开服务配置窗口,选中nfs选项;
3 打开虚拟机的 主菜单——系统设置-——服务器设置——nfs服务器,打开 “nfs服务器配置” 窗口,选择“增加”选项打开“添加nfs共享”窗口,在“基本”选项的“目录”中添加待挂载的目录文件,“主机”可设成访问者的ip,或是*号,允许所有人访问,再设“基本权限”选项成“读/写”;“常规选项”默认设置;“用户访问”选中“把远程跟用户当作本地根用户”;确定退出;
4 用 setup 命令打开防火墙设置,关闭防火墙;
5 linux虚拟机终端下键入命令 service nfs restart ;
6 pc机安装 SecureCRT 软件,借助该软件以root身份登陆目标机,键入命令
mount –o nolock (要访问机)ip:虚拟机上挂载的目录要挂在目标机的目录,例
mount –o nolock 192.168.220.93:/ /mnt/yaffs/tmp 这样就实现互访问
7 卸载上面6的挂载命令 umount /mnt/yaffs/tmp
技巧:终端下 输入命令 setup ,打开 system service ,选上 smb 、nfs ,保存退出,这样每次系统启动都会自动加载这两项功能。
烧写arm 机 系统
1 .把并口线插到pc机的并口,并把并口与JTAG相连,JTAG与开发板的14针JTAT口相连;同样把串口线与pc机连接
2 准备vivi 镜像的bootloader,kernel 镜像,root 文件,giveIO,secureSRT软件,sjf.exe控制烧录vivi 的软件
3 把整个GIVEIO文件拷贝到C:/WINDOWS下,并把GIVEIO.SYS拷贝到C:/WINDOWS/SYSTEM32/DRIVER下,安装好驱动
4 打开目标机电源,pc机运行sjf.exe ,选择“并口设置”设置并口地址,地址值可在pc机的设备管理器中的 PCI ECP PARALLEL PORT(LPT3) 的“资源”项中的输入/输出范围查到,输入开始地址
5 选择“烧写k9s1208”,检测 Flash 芯片,检测文件是否可用,输入vivi ,烧入vivi 程序到芯片。
6 运行secureSRT软件,进行串口通讯,新建连接,协议:serial ,端口:com3(4),波特率:115200,数据位:8,奇偶校验:无,停止位:1,数据流控制:无
7 通过串口下载ZImage(kernel镜像)和根文件系统(root文件):重启目标机,可看到secureSRT软件窗口显示一大堆文字,按下空格键,进到vivi 命令,键入命令 load flash kernel X ,选中kernel 镜像文件ZImage ,确认
8通过串口下载根文件系统(root文件):vivi 命令下,键入命令 load flash root X ,选中root 镜像文件, 确认
9 重启目标机,完成。
gdb常用命令小结
break NUM 在指定的行上设置断点。
bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序。
clear 删除设置在特定源文件、特定行上的断点。其用法为clear FILENAME:NUM
continue 继续执行正在调试的程序。该命令用在程序由于处理信号或断点而导致停止运行时。
display EXPR 每次程序停止后显示表达式的值。表达式由程序定义的变量组成。
file FILE 装载指定的可执行文件进行调试。
help NAME 显示指定命令的帮助信息。
info break 显示当前断点清单,包括到达断点处的次数等。
info files 显示被调试文件的详细信息。
info func 显示所有的函数名称。
info local 显示当函数中的局部变量信息。
info prog 显示被调试程序的执行状态。
info var 显示所有的全局和静态变量名称。
kill 终止正被调试的程序。
list 显示源代码段。
make 在不退出 gdb 的情况下运行 make 工具。
next 在不单步执行进入其他函数的情况下,向前执行一行源代码。
print EXPR 显示表达式 EXPR 的值。
gcc 常用命令
-DFOO=BAR
在命令行定义预处理宏FOO,其值为BAR
-IDIRNAME
将DIRNAME加入到头文件的搜索目录列表中
-LDIRNAME
将DIRNAME加入到库文件的搜索目录列表中,缺省情况下gcc 只链接共享库
-lFOO
链接名为libFOO的函数库
-ggdb
在可执行程序中包含只有GNU debugger才能使别的达两条是信息
-ansi
支持ANSI/ISO C的标准语法,取消GNU的语法扩展中与该标准有冲突的部分
(但这一选项并不能保证生成ANSI兼容的代码)
-pedantic
允许发出ANSI/ISO C标准所列出的所有警告
-pedantic -errors
允许发出ANSI/ISO C标准所列出的所有错误
-traditional
支持Kernighan & Ritchie C语法(如用旧式语法定义函数);如果不知道这个选项的含义,也没有关系
-werror
把所有警告转换为错误,以在警告发生时中止编译过程
-MM
输出一个make兼容的相关列表
-v
显示在编译过程的每一步中用到的命令
选项 解释
-ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色,例如 asm 或 typeof 关键词。
-c 只编译并生成目标文件。
-DMACRO 以字符串“1”定义 MACRO 宏。
-DMACRO=DEFN 以字符串“DEFN”定义 MACRO 宏。
-E 只运行 C 预编译器。
-g 生成调试信息。GNU 调试器可利用该信息。
-IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。
-LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。
-lLIBRARY 连接时搜索指定的函数库LIBRARY。
-m486 针对 486 进行代码优化。
-o FILE 生成指定的输出文件。用在生成可执行文件时。
-O0 不进行优化处理。
-O 或 -O1 优化生成代码。
-O2 进一步优化。
-O3 比 -O2 更进一步优化,包括 inline 函数。
-shared 生成共享目标文件。通常用在建立共享库时。
-static 禁止使用共享连接。
-UMACRO 取消对 MACRO 宏的定义。
-w 不生成任何警告信息。
-Wall 生成所有警告信息。
vi 常用命令
插入:
i 从光标当前位置开始插入
a 从光标当前位置的下一个字符开始插入
o 在光标位置的下行插入一个空行,再进行插入
O 在光标位置的上一行插入一个空行,再进行插入
I 从光标所在行的开头开始插入正文
A 从光标所在行的末尾开始插入正文
文件保存与退出:
:w 保存文件
:w! 强制保存文件
:q 退出
:q! 强制退出
:x = :wq
文件写入与打开:
:w filename 保存文件为给出的文件名
:w! filename 强制保存文件为给出的文件名
:f filename 将当前文件重命名为filename
:r filename 插入文件内容到光标指定的位置
:e filename 编辑新文件(打开另一个文件进行编辑)
复制粘贴:
[n]x 删除从光标开始的连续n个字符
[n]dd 删除从光标开发的n行
[n]yy 复制从光标开始的n行
p 粘贴
光标跳转:
h、j、k、l 左、下、上、右
H、M、L 屏幕最上边、屏幕中间位置、屏幕最下边
:$ 跳到文件最后一行
[n]H 跳到第n行
:n 跳到第n行(同[n]H)
w 光标向右移动一个字
b 光标向左移动一个字
编辑模式下按v 进入可视状态进行内容选择
[n]shift + > 所选内容向右移动一个tab
[n]shift + < 所选内容向左移动一个tab
查找替换:
/string 查找字符串 ,配合n(next)使用
:s/str1/str2 用str2替换行中首次出现的字符串str1
:s/str1/str2/g 用str2替换行中所有的字符串str1
:g/str1/s//str2/g 用str2替换全文中所有的字符串str1
利用vi 编辑 一个系统文件/root/.vimrc
修改/root/.vimrc文件,内容如下:
set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoindent
set cindent
set number
set showmatch
set mouse=a
利用 vi 重新编辑家目录下的 .bash_profile 文件 ,设置 arm-linux-gcc的环境变量
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=/usr/local/arm/3.4.1/bin:$PATH:$HOME/bin
export PATH
BASH_ENV=$HOME/.bashrc
USERNAME="root"
export USERNAME BASH_ENV PATH
gnu make 一些规则
1. 命令一定以tab开头
2. 默认make第一个目标
3. 不用写.h文件
4. 不要一个目标依赖多个.c文件
一些参数:
$* 不包含扩展名的目标文件名称。
$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。
$< 第一个依赖文件的名称。
$? 所有的依赖文件,以空格分开, 这些依赖文件的修改日期比目标的创建日期晚。
$@ 目标的完整名称。
$^ 所有的依赖文件,以空格分开,不包含重复的依赖文件。
例:
CC=arm-linux-gcc
CFLAGS = -Wall -O2 -static
OBJECT = main.o chain.o cutline.o maxtime.o readfile.o search.o showf.o
song:$(OBJECT)
%O:%C
clean:
shell
shell中的变量没有类型,可以用赋值符号(=)为变量赋值
变量设定规则:
1.变量与变量内容以等号(=)来连结;
2.等号两边不能直接接空格符;
3.变量名称只能是英文字母与数字,但是数字不能是开头字符;
4.引用变量用“$变量名”
5.若有空格符可以使用双引号或单引号将变量内容结合起来,但须要特别留意,双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符.
6.通常大写字符为系统预设变量,自行设定变量可以使用小写字符;
7.取消变量的方法为:unset 变量名
特殊变量 |
说明 |
$# |
传递到脚本的参数个数 |
$* |
以一5.通常大写字符为系统预设变量,自行设定变量可以使用小写字符;
6.取消变量的方法为:unset 变量名个单字符串显示所有向脚本传递的参数 |
$$ |
脚本运行的当前进程ID号 |
$? |
显示最后命令的退出状态,0表示没有错误,其它值表示有错误 |
$0 |
执行的脚本文件名 |
$1 |
脚本文件的第一个参数名 |
常用Shell内嵌命令
echo显示变量内容
[test @test test]# echo $PATH
env
显示目前系统中主要的预设变量内容
语法: [test @test test]# env
set
显示目前系统中全部的变量内容
语法: [test @test test]# set
declare声明变量内容
语法:# declare [-afirx] 变量名
read从键盘读入变量内容
条件测试
test condition 或[ condition ]
使用方括号时,要注意在条件两边加上空格
测试文件状态的条件表达式
-e 是否存在 -d 是目录 -f 是文件 -L 符号连接 -s 文件非空 -r 可读 -w 可写 -x 可执行
字符串测试有以下格式
test str_operator “str”
test “str1” str_operator “str2”
[ str_operator “str” ]
[ “str1” str_operator “str2”]
其中str_operator可以是:
= 两个字符串相等 != 两个字符串不相等
-z 空串 -n 非空串
测试数值格式如下:
test num1 num_operator num2
[ num1 num_operator num2 ]
其中num_operator可以是以下内容:
-eq 数值相等 -ne 数值不相等 -ge 数1大于等于数2
-le 数1小于等于数2 -gt 数1大于数2 -lt 数1小于数2
-a |
(and)两状况同时成立!test -r file -a -x file,则file同时具有r与x权限时,才为true. |
-o |
(or)两状况任何一个成立!Test -r file -o -x file,则file具有r或x权限时,就传回true. |
! |
相反状态,如test ! -x file,当file不具有x时,回传true. |
控制结构
if [条件1]; then
执行第一段程序
else
执行第二段程序
fi
if [条件1]; then
执行第一段程序
elif [条件2];then
执行第二段程序
else
执行第三段程序
fi
case $变量名称 in
“第一个变量内容”)
程序段一
;;
“第二个变量内容”)
程序段二
;;
*)
其它程序段
exit 1
esac
for (( 初始值; 限制值; 执行步阶 ))
do
程序段
done
for var in con1 con2 con3 ...
do
程序段
done
while [ condition ]
do
程序段
done
until [ condition ]
do
程序段
done