嵌入式开发第一阶段,环境搭建

简单介绍嵌入式开发环境搭建

目录

  • 一、Zmodem
  • 二、samba服务
  • 三、VMtools工具安装
  • 四、gcc简介
  • 五、gdb
  • 六、AutoTools

一、Zmodem

客户机与linux服务器传递文件的协议
使用SecureCRT-选项-会话选项,X/Y/Zmodem,目录-上传(rz命令默认打开的目录),下载(sz传递文件到windows的路径)
命令
rz:接收文件,从window传送文件到linux,保存到当前目录
sz [文件名]:发送文件到下载目录

二、samba服务

类似windows网上邻居的SMB协议,把linux当成假的windows
安装,sudo apt install samba
修改配置文件,/etc/samba/smb.conf,主要修改需要共享哪个目录,以及这个目录的访问权限
[chw_share] #共享文件夹名
comment = My share #标题
path = /home/chw/lab #共享文件夹路径
writable = yes #权限,可写
browseable = yes #权限,可浏览
samba用户管理,可以添加linux已有的用户名,另外设置密码
添加用户:sudo smbpasswd -a chw #-a,添加;设置密码
重启samba服务:
sudo /etc/init.d/smbd restart
sudo /etc/init.d/nmbd restart
windows访问linux共享文件方式:cmd,\192.168.184.128;或映射网络驱动器,\192.168.184.128\chw_share

三、VMtools工具安装

关闭虚拟机,CD/DVD、CD/DVD2和软盘设置为自动检测,重启虚拟机,此时虚拟机选项-安装VMware Tools可选
cd /media/chw/VMware Tools,进入目录
解压缩安装包,tar -zxvf VMwareTools*.tar.gz -C /tmp
进入解压缩目录,运行可执行程序开始安装,./vmware-install.pl
虚拟机设置-选项-共享文件夹-总是启用-添加-选择windows系统一个文件夹作为共享文件夹,在linux系统中,/mnt/hgfs/目录下也会出现一个同名的文件夹,和windows的实现共享

sourceInsight
linux运行sudo apt-get install wine,安装wine
下载source Insight4安装包
wine sourceinsightsetup.exe,安装sourceinsight
破解sourceinsight,替换exe文件,导入lic文件

四、gcc简介

GCC(GNU C Compiler,www.gnu.org)是GNU项目中符合ANSI C标准的编译系统,是一个交叉编译器,特别适用于不同平台的嵌入式开发。
gcc -v,如果安装了gcc,查看版本信息

GCC程序编译过程
.c源文件->预处理Pre-Processing得到.i预编译文件->编译Compiling得到.s汇编文件->汇编Assembling得到.o目标文件->链接(打包关联)Linking得到可执行文件
GCC支持的后缀名
后缀名 对应的语言
.c C原始程序
.C/.cc/.cxx C++原始程序
.m Objective-C原始程序
.i 已经预处理的C原始程序
.ii 已经预处理的C++原始程序
.s/.S 汇编语言原始程序
.h 预处理文件(头文件)
.o 目标文件,还未链接的二进制文件
.a/.so 编译后的库文件,静态库和动态库

1、编译过程参数
选项 含义
-c 只编译不链接,生成目标文件:gcc -c helloGCC.s -o helloGCC.o//编译生成目标文件
-S 只编译不汇编,生成汇编代码:gcc -S helloGCC.i -o helloGCC.s//生成汇编文件
-E 只预编译:gcc -E helloGCC.c -o helloGCC.i //预编译
-g 包含调试信息:gcc -g helloGCC.c -o helloGCC2//加入调试信息
-o 指定目标输出文件:gcc helloGCC.o -o helloGCC//链接生成可执行文件
-I[dir] 搜索头文件路径(大写i,后面跟包含的头文件路径)
扩展:file helloGCC.o//查看文件信息,版本,构架,位数,二进制文件
2、库选项
linux下静态库:在编译的时候就把库文件完全的链接成可执行文件,发布时不再需要库文件,格式,.a [libname.a]
linux下动态库:在运行时调用,在用到时才加载库函数,发布时要包含库文件,格式,.so [libname.so.[主版本号.次版本号.发行号]]
选项 含义
-static 静态编译
-shared 生成动态库文件,进行动态编译
-L dir 添加依赖库文件搜索路径
-fPIC 生成使用相对位置无关的目标代码(position independent code)
动态库和静态库在编译时相同,区别只在链接的时候
1)、编译静态库文件:
a、先生成目标文件.o gcc -c countlib.c//生成.o文件,countlib.o
b、调用ar crv [.a] [.o] ar crv countlib.a countlib.o//打包生成静态链接库countlib.a
c、调用静态链接库,gcc -o [file] [file.c] -L. [file.a] gcc -o count count.c -L./ countlib.a//调用静态链接库
2)、编译动态链接库
a、生成位置无关的目标代码,gcc -fPIC -c [.c] gcc -fPIC -c countlib.c//生成.o目标文件,countlib.o
b、gcc -shared -o [
.so] [*.o] gcc -shared countlib.o -o countlib.so//生存动态链接库countlib.so
c、调用动态库,gcc -o [file] [file.c] -L. [file.so] gcc count.c -o count2 -L./ countlib.so//隐式调用动态库so

3、警告选项
选项 含义
-w 关闭所有告警
-Wall 发出gcc提供的所有有用告警 gcc -Wall hello.c -o hello//显示所有告警信息
-pedantic 发出ansi c的所有警告

4、优化选项
选项 含义
-Olevel 优化等级,一般在最终发布的时候使用,0~3

五、gdb

gcc -g count.c -o count,生成带调试信息的可执行程序
which gdb,查询gdb命令所在路径
gdb count,启动gdb

0、查看源码
list,缩写l
1、打断点
b(reak) 函数名,b svalue [在函数svalue打断点]
b(reak) 行号,b 10 [在第10行打断点]
b(reak) 文件名:行号
b(reak) 行号 if 条件,b 14 if x > 1 [只有x>1的时候,14行的断点才有效]
2、查看断点
info break,查看断点,缩写i b
3、删除断点
delete 断点号,删除断点,缩写d,d 3 [删除第3个断点]

4、运行
r(un),程序运行,遇到断点停留
c(ontinue),继续往下运行,到下一个断点,所有断点结束后退出运行
q(uit),退出gdb

5、单步调试
next – step over,遇到函数不进入函数体,进入下一步代码
step – step into,进入函数体
finish – step return,直接返回当前的函数

6、打印值
p(rint),打印变量

7、监控值
watch ,设置监控点

8、wi,预览模式进行调试

六、AutoTools

自动生成makefile文件
GNU官网帮助
www.gnu.org/software/autoconf/manual/autoconf.html(www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.70/autoconf.html)
1、autoscan
用来扫描源代码目录,生成configure.scan;configure.scan包含了系统配置的基本选项,里面是一些宏定义,需要将它改名为configure.in
2、aclocal
是一个perl脚本程序,aclocal根据configure.in文件的内容,自动生成aclocal.m4文件,生成的aclocal.m4是宏展开文件
3、autoconf
用来产生configure文件,configure.in文件是一些宏,经过autoconf处理后变成检查系统特性、环境变量、软件必须的参数的shell脚本
4、autoheader
自动生成config.in,在configure生成config.h时候的in文件
5、automake
使用automake --add-missing来产生makefile.in,makefile.am是用来生成mmakefile.in的,需要手工编辑。

sudo apt install autoconf,安装软件包
6、演示
autoscan,生成configure.scan,改名为生成configure.ac(或.in都可以)
醒不了的梦

你可能感兴趣的:(linux/嵌入式,linux,c语言)