目录
3.出现environment variable warning这种警告怎么解决?
1.ubuntu看自己版本
操作系统发行版号和版本
版本号
发行版本信息
liinux版本信息及类型
查看linux内核信息
2.虚拟机如何给硬盘扩容
3.shell脚本
shell脚本编程:shell下执行的就是脚本
linux脚本:
这里主要以当前Ubuntu系统shell下执行的文件,文件内容由各个命令组成
脚本在嵌入式开发中主要用来做配置,一个复杂的嵌入式系统是可以配置的,配置执行的过程就是脚本执行
openwrt很大一部分是用脚本去完成的,不是c语言
脚本在什么地方执行:
目前在ubuntu系统下脚本是shell里执行的,用echo $0来查询脚本是在哪个shell下执行,查询结果是-bash
shell是操作系统的终端命令行,是一种人机交互的方式(常用的人机交互方式是GUI or cmd)那么进行人机交互的工具就是shell,shell上的操作就是人机交互的手段
这些手段可以用命令和逻辑构成
基本命令可以完成大部分工作,但是完全靠命令去完成重复的工作是有一定缺陷的,假如现在要创建一个1.c文件,用touch 1.c就可以,那创建10000个呢
实际操作创建29个文件的脚本
3.1脚本的运行机制
c语言的编写过程:编写源代码->编译源代码->链接成二进制可执行文件,最后运行这个可执行文件,这一个过程叫做编译执行。
脚本不同,写好就执行,不是编译执行,没有编译链接过程,这个执行方式叫解释执行。进一步讲,解释运行就是执行shell程序的时候,shell解析器会逐行解释脚本程序代码,然后一行一行解释执行,一边解释一边执行。
4.如何查看帮助
man man
man rm
man/info/help
pwd
cd --help (change directory)
cd ~ cd - cd . (. 表示当前目录)
./1.c(./ 可执行程序)
ls -la 目录名
mkdir/rmdir
linux路径分隔符是“/”
history显示所有曾经输入过的命令
用!+数字来执行曾经执行过的某一个命令
touch(创建或更新文件,不能创建重复文件,但每touch一次,时间上会更新)、
mv(移动文件或路径)、cp、rm
5.find命令
find 目录名/文件名 选项 条件
find -name qiqi
find -amin -5(查看5分钟以前访问过的文件)
6.grep命令
grep 选项 模式 文件名
grep qiqi * -nr (number表示行号,r表示递归查找,*所有文件)
如果查找全部字符串匹配的grep命令就加w -wnr
file qiqi.tar.bz2(file文件可以识别文件类型)
uci show | grep mylinkit
uci set system.@system[0].hostname='qiqi'
uci show | grep qiqi
7.安装secureCRT
ssh localhost
sudo apt-get install openssh-server
netstat -nat | grep 22
都在监听了
没监听就关闭防火墙
sudo ufw disable
secureCRT连接成功
要确保ubuntu和window两边都能拼通,并在Ubuntu下载好ssh
8.应用程序的编写与编译
1.x86平台下的应用程序编写与编译
没有可执行权限,赋予可执行权限x
2.交叉编译
交叉编译就是在一个平台上(x86平台)编译另外一个平台上(mips)平台的可执行程序
解决编译告警方法
3.出现environment variable warning这种警告怎么解决?
解决编译警告的方法:
法1:
rm -f qiqi(你的文件夹)
~/
~/code2/QC62/qsdk/staging_dir/toolchain-arm_cortex-a7_gcc-5.2.0_musl-1.1.16_eabi/bin/arm-openwrt-linux-muslgnueabi-gcc -o qiqi qiqi.c
cat /etc/environmentvim /etc/environment ~/code2/QC62/qsdk/staging_dir
source /etc/environment(生效)// . /etc/environment
法2:
echo $PATH
export ~/code2/QC62/qsdk/staging_dir:$PATH
设置交叉编译器的路径
export STAGING_DIR=~/code2/QC62/qsdk/staging_dir
export PATH=~/code2/QC62/qsdk/staging_dir/toolchain-arm_cortex-a7_gcc-5.2.0_musl-1.1.16_eabi/bin:$PATH
设置交叉编译器的路径,这样不用输入上面的绝对路径
然后重新编译
先看结果
在linux平台下编译成功,但是x86就不行
4.集成到开发环境中完成自动编译
不要重复劳动,拷贝一个照着写
模块化编译:make package/fengke/{clean,prepare,compile,install} V=99
make V=99,检查编译是不是好的
stagdiring 有编译器生成的可执行文件
驱动程序(开机就启动的)的编写与编译
1.交叉编译
a.如何写makefile命令
参考编译openwrt时候记录的log和其它驱动程序的makefile
b.如何测试编译好的驱动
insmod fengke_drv.ko
rmmod fengke_drv.ko
2.集成编译
首先找一个可以参考的内核模块模板来进行对比
9.如何开机运行我们的应用程序
先看一下telnet进程启动实例
a 用ps命令看一下telnet进程启动的参数设置
cd /etc/init.d/
cat telnet
ps
b 哪里设置的telnet进程的启动参数
c 如何知道telnet进程何时启动?
参考以下图片,可用ls -la查看细节
s50telnet -> ../init.d/telnet(怎么链接过去的呢)
10.实例演示如何启动fengke应用程序
a 如何保证ps可用查看到fengke进程
修改源代码fengke.c,增加死循环
b 哪里设置的fengke进程的启动参数
/etc/init.d/目录中增加fengke启动脚本
并设置启动顺序号为80
c 软链接是自动生成的,执行编译命令make V=99
vi的使用方法
11.linux通过samba映射磁盘到Windows
12.小知识
Keil,Visual Studio -----集成开发环境 IDE
Makefile的作用
1.简化程序的编译过程,减少重复劳动
2.组织管理源代码创建fk1.c
用命令编译成可执行文件
gcc -o fengke fk1.c
编译------由编译器将.c源代码编译成.s汇编代码
预处理:编译预处理主要是处理4种情况:
a 宏定义 b#include文件包含
c 条件编译 d 特殊符号
fk1.c ->ccUqdibq.s ->ccOEfCs8.o
汇编-----由汇编器将.s源代码转换成.o
3链接----由链接器将代码在执行过程中用到的目标文件和库文件链接成一个可执行程序
Makefile的规则:
目标文件:依赖文件1 依赖文件2 依赖文件n
+命令
Makefile的名字:Makefile或makefile;*.mk的文件主要用于被包含
Makefile如何引用其它的Makefile?
依靠include关键字去引用,主要被引用的Makefile的名字最好不要用Makefile或makefile,应该用其它的名字,如*.mk
条件定义,宏定义
#号用来注释
1静默执行Makefile
全局静默执行:make -s
局部静默执行:加@符号在命令前面,表示对这条命令静默执行
2规则通配符%和规则的自动推导
规则通配符%表示规则中的一个字符或多个字符
自动推导其实就是Makefile自己去推导(匹配)相应的规则并执行命令,当Makefile需要某一个目标时,它
会拿这个目标去和某些规则匹配,一旦匹配成功则Makefile会试图用规则中的依赖,并执行规则中的命令
3伪目标(.PHONY)
伪目标可以直接写, 但一定要用(.PHONY)声明这个目标是伪目标。声明是伪目标后就一定可以执行相应的命令。因为
Makefile的规则的执行里定义了规则执行的原理:当目标文件不存在或某个依赖文件比目标文件新,则执行命令。那么伪目标适用于目标文件不存在
Makefile中的常用变量
$@ ----目标文件
$<-----第一个依赖文件
$^-----所有的依赖文件
Makefile的环境变量
用export导出的变量就是环境变量,没有export而是写在Makefile里面的变量就是普通变量,普通变量通常用全小写命名,环境变量通常用全大写命名环境变量与普通变量的不同:
环境变量适用于整个Makefile文件,也可以叫做Makefile的全局变量;普通变量只适用于当前Makefile,也可以叫做局部变量
Makefile中变量的赋值之间可以有空格,这一点和shell的赋值不同
:= #即时变量,立即赋值的变量
= #延时变量,使用时赋值
?=
#延时变量,只有在变量第一次定义的时候才有效,如果变量在前面已经定义了则这个赋值操作会被忽略
+=
变量的追加,这个变量是即时变量还是延时变量依靠前面的变量定义确定,追加字符会在2个字符之间增加空格