/******************************************************************************/
基本操作篇:
安装完整的帮助文档:
sudo apt-get install manpages manpages-dev manpages-posix manpages-posix-dev
查看关于xxx的所有帮助信息:
man -f xxx
man man
三大类要通
man: manual帮助文档。
结构:
NAME:
SYNOPSIS:
DESCRIPTION:
OPTIONS:
SEE ALSO
BUGS:
EXAMPLE:
AUTHORS:
关于ls命令
=================================================================================
ls -l : 列出当前文件详细信息 ------------------------------------options
文件类型:(7种)
d: directory
-: regular
l: link
s: socket
p: fifo
b: block
c: character
对于目录而言的各种权限:
可读:读取其目录项
可写:可以增删文件
可执行:可以进入该目录
file [filename]:该命令输出显示文件时二进制文件、文本文件、目录文件、设备文件、还是Linux其他类型文件
时间戳:
最近修改时间mtime
最近访问时间atime
最近状态改变时间ctime
cd:change diretory
=============================================================
/*************************************************************************************/
shell篇:
~.bashrc
alias c = 'clear'
source .bashrc :生效
cd /etc/vim
touch file:有就改变时间戳
pwd
which ls:出处
adduser newuser
deluser --remove-home user1
delgroup groupname
小技巧:
cd: 直接回家
cd -: 回到刚刚去过的地方
外星语: 硬链接
IT语: 引用
民间说法:别名
cp: copy ----------[option] -r -p -i -f -d -a
=============================================================
cp file1 file2
cp dir1 dir2 -r: 递归地复制整个目录
mv: move -f -i -v
=============================================================
1,移动文件(当第二个参数是有效路径的时候)
mv file dir
2,重命名(当第二个参数不是有效路径的时候)
mv apple cherry
rm: remove -f -i -r -v
=============================================================
删除文件:rm file
删除目录:rm dir -r
mkdir: 创建一个空目录 -p 通常创建需具有写入权
rmdir: 删除一个空目录 -p
tail: 查看一个文件的最末尾的若干行:tail xxx -n N
一般可以用来查看日志文件
ln:link
=============================================================
1,创建硬链接文件:硬链接是利用Linux中为每个文件分配的物理编号--inode 建立连接,硬链接不能跨越文件系统
ln a b (给a这个文件取个别名b)
2,创建软链接(符号链接)文件:是利用文件的路径名,是绝对路径。ln a b -s (创建一个软链接文件b,让其指向a)
ln [-s] target link_name: 缺省为硬链接,-s 为软连接
tar: 归档、压缩
=============================================================
1,归档: tar -cf example.tar file dir/ ...
2,压缩gz: tar -czf example.tar.gz file dir/ ... (gzip)
3,压缩bz2:tar -cjf example.tar.bz2 file dir/ ... (bzip2)
4,解压缩gz: tar -xzf example.tar.gz (解压到当前目录)
5,解压缩bz2:tar -xjf example.tar.bz2 -C dir (解压到dir里面)
6,查看压缩文件:
tar -tf example.tar
tar -tf example.tar.gz
tar -tf example.tar.bz2
/******************************************************************************/
sudo passwd root
emacs
gedit
vi编辑器篇:
关于vi的使用(编辑器的鼻祖)
=============================================================
vi:默认的低版本
vim:升级版
切换到命令模式:esc
切换到编辑模式:i o a O A I
:w 写入(保存)
:w file (另存为file)
:q 退出
:q! 强制退出
yy: 复制一行
Nyy: 复制N行
yw: 复制一个单词
Nyw: 复制N个单词
y$: 复制到行末
y^: 复制到行首
dd: 剪切一行
Ndd: 剪切N行
dw: 剪切一个单词
Ndw: 剪切N个单词
d$: 剪切到行末
d^: 剪切到行首
x: 剪切一个字符
r: 进入单字符替换模式
p: paste 粘贴
xp:交换两个字符的顺序
u:undo 撤销
ctrl+r: 恢复
/string 开始往下找string, 按n找下一个,按N找上一个
?string 开始往上找string, 按n找上一个,按N找下一个
:%s/old_string/new_string --> 找到每一行的第一个old_string, 并将之替换成new_string
:%s/old_string/new_string/g --> 找到所有的old_string, 并将之替换成new_string
:5,10s/old_string/new_string/g --> 找到第5行到第10行的所有的old_string, 并将之替换成new_string
:[range] s/fron/to/[flags]
-g:直接不用问
-c:每次都进行询问
定位到第N行
:N
ctrl+u : 向上翻页
ctrl+d : 向下翻页
gg: 快速定位到文件头
G : 快速定位到文件尾
:sp file --> 在同一个窗口打开另一个文件file
/******************************************************************************/
进程篇:
ps的一般用法:
=============================================================
ps -ef
ps aux:显示所有包含其他使用者的行程
ps ajx
ps -A:列出所有 -w:加宽
动态查看进程的状态:top
pstree: 看有没有指定id,没有看是不是以init这个基本进程为根,树状图
nice [-n <优先等级>] [-help] [-version] [执行指令]:改变程序执行的优先权等级
eg: nice -n ls 将ls的优先序加1并执行
程序执行优先级有连个指标: NI(好人)、PR(优先级), 反比关系
renice [-n] <priority> -p/g/u <pid>/<pgrp>/<user> [pid]/[pgrp]/[user]
kill: 给进程们发送一个指定的信号。
用法:
kill -l
kill -s SIGKILL 2919 / kill -9 2919
kill -s SIGXXX PID --> 给进程号为PID的进程发送一个信号:SIGXXX
/******************************************************************************/
查找篇:
命令行快速定位:
ctrl+a(ahead): 开头
ctrl+e(end): 结尾
关于find和grep
=============================================================
cat -v -T -E -u
more -p -d -s -num | Space\ Enter
less --> <---
head: [-num]
tail: [+-num] eg:tail -8 /proc/cpuinfo
/string n N ?string ---在Makefile中
:
find: 查找文件
find . -name types.h --> 在.递归地查找所有名字符合*.c的文件
find . -type d --> 在.递归地查找所有类型是目录的文件
grep: 查找字符串
grep "xxx" ./*.c -rnw --> 在当前目录的所有*.c文件中,查找xxx字符串
find . -name "*.c" | xargs grep "hello" -nw
--> 在当前目录查找所有的*.c文件,并在这些文件中查找所有的hello
通配符
=============================================================
1,* ==> 通配任意长度的任意字符
2,? ==> 通配一个任何字符
3,[] ==> 通配一个指定字符
diff: different ==> 比较两个文件或者目录的异同
/******************************************************************************/
功能查找篇:
man man
/******************************************************************************/
权限篇:
chmod u/g/o +-= r/w/x(八进制) filename
chown username file: 更改文件file的所有者 eg: chown foo file :改为foo的。
chgrp groupname file: 更改文件的所有组
/******************************************************************************/
重定向篇:
=============================================================
commd 1> file ==> 将程序commd的标准输出信息重定向到file中
commd 2> file ==> 将程序commd的标准出错信息重定向到file中
commd 0< file ==> 将程序commd的标准输入重定向为file
shell脚本当中的引号:
=============================================================
'' : 单引号 --> 会将里面的任何字符都看作是字符串
"" : 双引号 --> 里面可以包含命令
`` : 抑音符 --> 用来说明一个命令
/******************************************************************************/
打补丁篇:
/******************************************************************************/
编译器版本:http://gcc.gnu.org
编译库篇:
X86:
预处理:cpp/ gcc -E hello.c -o hello.i
编译:cc1/ gcc -S hello.i -o hello.S
汇编:as gcc -c hello.S -o hello.o
链接:ld gcc hello.o -o hello
工具:/usr/local/arm/xxx/arm-angs...-linux/bin:
--------gcc
--------as
ARM:
库文件:/usr/local/arm/xxx/arm-angs...-linux/lib/
头文件:/usr/local/arm/xxx/arm-angs...-linux/include
汇编/C ->.o
链接脚本--->生成可执行文件elf--->bin(利用objcopy)
GNU编译器缺省生成的文件由若干段组成:
.text 包含程序的指令代码
.data 包含固定的数据、如常量、字符串
.bss 包含未初始化的变量、数组等
链接器就是将上述多个目标文件的.text、.data、.bss根据连接脚本从什么地址放置这些段
GNU Makefile:
arm-linuc-gcc -wall -O2 -c -o -S $@ $<
$@:目标
$<:依赖
-Ttext=0x40000000
arm-linux-gcc -nostdlib -c xxx.o -o xxx.o
xxx.lds为连接脚本(有两种,缺省、自定义)
-O bfdname :输出格式
-F bfdname :同时指明源文件
-R sectionname:从输出文件中删除掉所有名为sectionname的段
-S:不从源文件中复制定位信息和符号信息到目标文件中
-g:不从源文件中复制调试符号到目标文件中
arm-linux-objdump -D -m led_elf>led.dis
-D:显示文件中所有汇编信息
-m machine
.....
GNU 链接脚本文件的格式:P48
命令:描述输出文件的内存分布
SECTIONS
{
.=链接地址
.段名(.text/.data.bss) :{段内容/*(.text)}
}
ENTRY(symbol):设置入口点,参数是一个符号名
OUTPUT_FORMAT(bfdname):输出文件的BFD格式
OUTPUT_ARCH(bfdarch):指定平台架构
对于ARM:bfdname=elf32-littlearm. bfdarch=arm
=============================================================
a.c、b.c->a.o、b.o->libx.a/libx.so
区别:程序编译时被连接到目标代码中
libx.a --->静态库
创建静态库:ar crs libmyhello.a hello.o
gcc -o hello main.c -L. -lmyhello
libx.so--->动态库
创建共享库:gcc -fPIC -Wall -c hello.c--->hello.o
gcc -shared -fPIC -o libmyhello.so hello.o
编译选项:
-shared:指定生成动态链接库
-static:指定生成静态链接库
-fPIC :编译为位置独立的代码,用于编译共享库
-L. :指定要连接的库在当前目录中
-l:指定链接时需要的动态库
-Wall:生成所有的警告信息
-ggdb:尽可能生成gdb的可以使用得调试信息
-g:在编译时产生调试信息
-c:只激活预处理、编译和汇编-->.o
-Wl,options:把参数(options)传递给链接器ld,在options中间有逗号,将分多个选项传给链接程序
.....
.....
.....
project 结构:
include、lib、src、makefile
command:
/******************************************************************************/
磁盘篇:
fdisk -l : 查看磁盘分区
df: 查看挂载的东西
cat /proc/partitions :查看SD卡分区
sudo mount /dev/sdb1/ /mnt :挂载U盘,....
sudo mount UnbuntoIP:/opt/target /mnt/ -t nfs -o nolock :开发板与Ubunto挂载(3种可以实现这种功能)
umount: 卸载
/******************************************************************************/
错误篇:
#include<errno.h>
printf("errno is:%d\n",errno);
在linux2.4.20-18内核代码的/usr-->/usr/include/asm-generic/errno.h 、errno-base.h
/******************************************************************************/
网络篇:
sudo ifconfig eth0 192.168.7.x
相关网络配置文件:jing
1、配置IP,网关,子网掩码: sudo vi /etc/network/interfaces
2、配置DNS服务器: sudo vim /etc/resolv.conf
3、重启 sudo /etc/init.d/networking restart
设置开发板IP,参考uboot启动参数设置
4、查看DNS服务器: nslookup server
关于网络配置
=============================================================
1,配置IP地址、子网掩码、网关
sudo vi /etc/network/interfaces
2,手工启用/禁用网卡:
sudo ifconfig eth0 down --> 禁用
sudo ifconfig eth0 up --> 启用
3,ping命令
ping 192.168.100.1
ping www.baidu.com
检测网络是否通畅
4,如果不能连外网:
5.1 你的网段没有配对:192.168.100.xxx
5.2 DNS服务器没有搞对:
sudo vi /etc/resolv.conf
添加一行:
nameserver 202.96.134.133
(sudo apt-get remove --purge netmanager)
5.3 给ubuntu一个默认网关
sudo route add default gw 192.168.100.1
5,重启网络服务:
sudo /etc/init.d/networking force-reload
sudo /etc/init.d/networking restart
关于NFS:开发板与Ubunto之间的文件共享
=============================================================
1,查看NFS服务允许系统中有哪些目录可以被其他系统挂接:
showmount -e
2,修改了NFS服务的配置文件:
sudo vi /etc/exports
如果你,添加了这一行:
/home/gec/dir *(...)
3,重启NFS服务:
sudo /etc/init.d/nfs-kernel-server reload
sudo /etc/init.d/nfs-kernel-server restart
在主机端(ubuntu):
=====================
1,下载安装nfs服务:
sudo apt-get install nfs-kernel-server
2,配置
sudo vi /etc/exports
添加一句:
/opt/target *(rw,sync,no_subtree_check)
在开发板一端
====================
挂接这个目录:
sudo mount 192.168.100.ubuntuIP:/opt/target /mnt -t nfs -o nolock
关于SSH,putty 工具访问ubunto.
=============================================================
putty的使用:
ubunto的优化:www.gooldle.com
关于samba:window与Ubunto之间的文件共享
=============================================================
1,下载安装:
sudo apt-get update
sudo apt-get install samba
2,配置其配置文件:
[share]
path=/home/gec/Download
browseable=yes
public=yes
writable=yes
available=yes
3,重启samba服务:
sudo service smbd reload
sudo service smbd restart
/******************************************************************************/
软件安装篇:
1修改源列表网址 /etc/apt/sources.list
2更新本地源列表 sudo apt-get update
3下载并安装软件 sudo apt-get install XXX
4卸载软件 sudo apt-get remove xxx sudo dpkg -r XXX*
5彻底卸载软件 sudo apt-get remove xxx --purge
6手工安装软件 sudo dpkg -i xxx.deb
7修复损坏的软件 sudo apt-get install/remove xxx --fix-broken
sudo apt-get install/remove xxx --fix-missing
sudo apt-get install -f
aptitude search fcitx-bin*
apt-cache show XXXX :获取包的相关信息
常用命令:
apt-cache :查询软件包信息
apt-proxy: 搭建APT代理服务器
apt-show-versions:
apt-config:
apt-cdrom:
关于APT软件管理器
=============================================================
1,选择ubuntu的源列表
2,连接远端服务器并扫描其软件列表,下载到本地:
sudo apt-get udpate
3,下载并安装你的东西:
sudo apt-get install vim
即可。这样即自动下载vim的相关安装包(/var/cache/apt/archives),并自动安装。
4,ubuntu-12.04
安装软件的时候,如果拿到的是一堆源码,那么安装三部曲:
1 ./configure
2 make
3 make install
/******************************************************************************/
others:
给一个命令取一个别名:
=============================================================
/home/gec/->.bashrc
alias c='clear'
让bash重新读取其配置文件
source .bashrc
脚本:一堆命令的集合,完成更加强大的功能
根目录:系统所有文件的起点。
家目录:某个用户的专属目录:在你家里你可以做任何事情,即你有任意权限。
/home: 不是家目录,小区。
gec的家目录:/home/gec,这个目录是gec的家目录,gec的一般性文件都会放在这个地方,因此会比较大,所以一般会给他挂接一个独立的分区。
zhangsan的家目录:/home/zhangsan
....
/bin: binary,可执行的二进制文件所在的地方。
/sbin: super binary, 需要管理员权限来执行的二进制文件。
/dev: device,外设对应的设备节点文件。
/etc: 配置文件所在的地方。
/var: variable,存放很多易变的文件,会更容易产生磁盘碎片,因此一般在装系统的时候会给这个目录挂接一个独立的分区。
===============================================================================================
cat /proc/cpuinfo :读取有关cpu的信息
cat /proc/partitions
基本操作篇:
安装完整的帮助文档:
sudo apt-get install manpages manpages-dev manpages-posix manpages-posix-dev
查看关于xxx的所有帮助信息:
man -f xxx
man man
三大类要通
man: manual帮助文档。
结构:
NAME:
SYNOPSIS:
DESCRIPTION:
OPTIONS:
SEE ALSO
BUGS:
EXAMPLE:
AUTHORS:
关于ls命令
=================================================================================
ls -l : 列出当前文件详细信息 ------------------------------------options
文件类型:(7种)
d: directory
-: regular
l: link
s: socket
p: fifo
b: block
c: character
对于目录而言的各种权限:
可读:读取其目录项
可写:可以增删文件
可执行:可以进入该目录
file [filename]:该命令输出显示文件时二进制文件、文本文件、目录文件、设备文件、还是Linux其他类型文件
时间戳:
最近修改时间mtime
最近访问时间atime
最近状态改变时间ctime
cd:change diretory
=============================================================
/*************************************************************************************/
shell篇:
~.bashrc
alias c = 'clear'
source .bashrc :生效
cd /etc/vim
touch file:有就改变时间戳
pwd
which ls:出处
adduser newuser
deluser --remove-home user1
delgroup groupname
小技巧:
cd: 直接回家
cd -: 回到刚刚去过的地方
外星语: 硬链接
IT语: 引用
民间说法:别名
cp: copy ----------[option] -r -p -i -f -d -a
=============================================================
cp file1 file2
cp dir1 dir2 -r: 递归地复制整个目录
mv: move -f -i -v
=============================================================
1,移动文件(当第二个参数是有效路径的时候)
mv file dir
2,重命名(当第二个参数不是有效路径的时候)
mv apple cherry
rm: remove -f -i -r -v
=============================================================
删除文件:rm file
删除目录:rm dir -r
mkdir: 创建一个空目录 -p 通常创建需具有写入权
rmdir: 删除一个空目录 -p
tail: 查看一个文件的最末尾的若干行:tail xxx -n N
一般可以用来查看日志文件
ln:link
=============================================================
1,创建硬链接文件:硬链接是利用Linux中为每个文件分配的物理编号--inode 建立连接,硬链接不能跨越文件系统
ln a b (给a这个文件取个别名b)
2,创建软链接(符号链接)文件:是利用文件的路径名,是绝对路径。ln a b -s (创建一个软链接文件b,让其指向a)
ln [-s] target link_name: 缺省为硬链接,-s 为软连接
tar: 归档、压缩
=============================================================
1,归档: tar -cf example.tar file dir/ ...
2,压缩gz: tar -czf example.tar.gz file dir/ ... (gzip)
3,压缩bz2:tar -cjf example.tar.bz2 file dir/ ... (bzip2)
4,解压缩gz: tar -xzf example.tar.gz (解压到当前目录)
5,解压缩bz2:tar -xjf example.tar.bz2 -C dir (解压到dir里面)
6,查看压缩文件:
tar -tf example.tar
tar -tf example.tar.gz
tar -tf example.tar.bz2
/******************************************************************************/
sudo passwd root
emacs
gedit
vi编辑器篇:
关于vi的使用(编辑器的鼻祖)
=============================================================
vi:默认的低版本
vim:升级版
切换到命令模式:esc
切换到编辑模式:i o a O A I
:w 写入(保存)
:w file (另存为file)
:q 退出
:q! 强制退出
yy: 复制一行
Nyy: 复制N行
yw: 复制一个单词
Nyw: 复制N个单词
y$: 复制到行末
y^: 复制到行首
dd: 剪切一行
Ndd: 剪切N行
dw: 剪切一个单词
Ndw: 剪切N个单词
d$: 剪切到行末
d^: 剪切到行首
x: 剪切一个字符
r: 进入单字符替换模式
p: paste 粘贴
xp:交换两个字符的顺序
u:undo 撤销
ctrl+r: 恢复
/string 开始往下找string, 按n找下一个,按N找上一个
?string 开始往上找string, 按n找上一个,按N找下一个
:%s/old_string/new_string --> 找到每一行的第一个old_string, 并将之替换成new_string
:%s/old_string/new_string/g --> 找到所有的old_string, 并将之替换成new_string
:5,10s/old_string/new_string/g --> 找到第5行到第10行的所有的old_string, 并将之替换成new_string
:[range] s/fron/to/[flags]
-g:直接不用问
-c:每次都进行询问
定位到第N行
:N
ctrl+u : 向上翻页
ctrl+d : 向下翻页
gg: 快速定位到文件头
G : 快速定位到文件尾
:sp file --> 在同一个窗口打开另一个文件file
/******************************************************************************/
进程篇:
ps的一般用法:
=============================================================
ps -ef
ps aux:显示所有包含其他使用者的行程
ps ajx
ps -A:列出所有 -w:加宽
动态查看进程的状态:top
pstree: 看有没有指定id,没有看是不是以init这个基本进程为根,树状图
nice [-n <优先等级>] [-help] [-version] [执行指令]:改变程序执行的优先权等级
eg: nice -n ls 将ls的优先序加1并执行
程序执行优先级有连个指标: NI(好人)、PR(优先级), 反比关系
renice [-n] <priority> -p/g/u <pid>/<pgrp>/<user> [pid]/[pgrp]/[user]
kill: 给进程们发送一个指定的信号。
用法:
kill -l
kill -s SIGKILL 2919 / kill -9 2919
kill -s SIGXXX PID --> 给进程号为PID的进程发送一个信号:SIGXXX
/******************************************************************************/
查找篇:
命令行快速定位:
ctrl+a(ahead): 开头
ctrl+e(end): 结尾
关于find和grep
=============================================================
cat -v -T -E -u
more -p -d -s -num | Space\ Enter
less --> <---
head: [-num]
tail: [+-num] eg:tail -8 /proc/cpuinfo
/string n N ?string ---在Makefile中
:
find: 查找文件
find . -name types.h --> 在.递归地查找所有名字符合*.c的文件
find . -type d --> 在.递归地查找所有类型是目录的文件
grep: 查找字符串
grep "xxx" ./*.c -rnw --> 在当前目录的所有*.c文件中,查找xxx字符串
find . -name "*.c" | xargs grep "hello" -nw
--> 在当前目录查找所有的*.c文件,并在这些文件中查找所有的hello
通配符
=============================================================
1,* ==> 通配任意长度的任意字符
2,? ==> 通配一个任何字符
3,[] ==> 通配一个指定字符
diff: different ==> 比较两个文件或者目录的异同
/******************************************************************************/
功能查找篇:
man man
/******************************************************************************/
权限篇:
chmod u/g/o +-= r/w/x(八进制) filename
chown username file: 更改文件file的所有者 eg: chown foo file :改为foo的。
chgrp groupname file: 更改文件的所有组
/******************************************************************************/
重定向篇:
=============================================================
commd 1> file ==> 将程序commd的标准输出信息重定向到file中
commd 2> file ==> 将程序commd的标准出错信息重定向到file中
commd 0< file ==> 将程序commd的标准输入重定向为file
shell脚本当中的引号:
=============================================================
'' : 单引号 --> 会将里面的任何字符都看作是字符串
"" : 双引号 --> 里面可以包含命令
`` : 抑音符 --> 用来说明一个命令
/******************************************************************************/
打补丁篇:
/******************************************************************************/
编译器版本:http://gcc.gnu.org
编译库篇:
X86:
预处理:cpp/ gcc -E hello.c -o hello.i
编译:cc1/ gcc -S hello.i -o hello.S
汇编:as gcc -c hello.S -o hello.o
链接:ld gcc hello.o -o hello
工具:/usr/local/arm/xxx/arm-angs...-linux/bin:
--------gcc
--------as
ARM:
库文件:/usr/local/arm/xxx/arm-angs...-linux/lib/
头文件:/usr/local/arm/xxx/arm-angs...-linux/include
汇编/C ->.o
链接脚本--->生成可执行文件elf--->bin(利用objcopy)
GNU编译器缺省生成的文件由若干段组成:
.text 包含程序的指令代码
.data 包含固定的数据、如常量、字符串
.bss 包含未初始化的变量、数组等
链接器就是将上述多个目标文件的.text、.data、.bss根据连接脚本从什么地址放置这些段
GNU Makefile:
arm-linuc-gcc -wall -O2 -c -o -S $@ $<
$@:目标
$<:依赖
-Ttext=0x40000000
arm-linux-gcc -nostdlib -c xxx.o -o xxx.o
xxx.lds为连接脚本(有两种,缺省、自定义)
-O bfdname :输出格式
-F bfdname :同时指明源文件
-R sectionname:从输出文件中删除掉所有名为sectionname的段
-S:不从源文件中复制定位信息和符号信息到目标文件中
-g:不从源文件中复制调试符号到目标文件中
arm-linux-objdump -D -m led_elf>led.dis
-D:显示文件中所有汇编信息
-m machine
.....
GNU 链接脚本文件的格式:P48
命令:描述输出文件的内存分布
SECTIONS
{
.=链接地址
.段名(.text/.data.bss) :{段内容/*(.text)}
}
ENTRY(symbol):设置入口点,参数是一个符号名
OUTPUT_FORMAT(bfdname):输出文件的BFD格式
OUTPUT_ARCH(bfdarch):指定平台架构
对于ARM:bfdname=elf32-littlearm. bfdarch=arm
=============================================================
a.c、b.c->a.o、b.o->libx.a/libx.so
区别:程序编译时被连接到目标代码中
libx.a --->静态库
创建静态库:ar crs libmyhello.a hello.o
gcc -o hello main.c -L. -lmyhello
libx.so--->动态库
创建共享库:gcc -fPIC -Wall -c hello.c--->hello.o
gcc -shared -fPIC -o libmyhello.so hello.o
编译选项:
-shared:指定生成动态链接库
-static:指定生成静态链接库
-fPIC :编译为位置独立的代码,用于编译共享库
-L. :指定要连接的库在当前目录中
-l:指定链接时需要的动态库
-Wall:生成所有的警告信息
-ggdb:尽可能生成gdb的可以使用得调试信息
-g:在编译时产生调试信息
-c:只激活预处理、编译和汇编-->.o
-Wl,options:把参数(options)传递给链接器ld,在options中间有逗号,将分多个选项传给链接程序
.....
.....
.....
project 结构:
include、lib、src、makefile
command:
/******************************************************************************/
磁盘篇:
fdisk -l : 查看磁盘分区
df: 查看挂载的东西
cat /proc/partitions :查看SD卡分区
sudo mount /dev/sdb1/ /mnt :挂载U盘,....
sudo mount UnbuntoIP:/opt/target /mnt/ -t nfs -o nolock :开发板与Ubunto挂载(3种可以实现这种功能)
umount: 卸载
/******************************************************************************/
错误篇:
#include<errno.h>
printf("errno is:%d\n",errno);
在linux2.4.20-18内核代码的/usr-->/usr/include/asm-generic/errno.h 、errno-base.h
/******************************************************************************/
网络篇:
sudo ifconfig eth0 192.168.7.x
相关网络配置文件:jing
1、配置IP,网关,子网掩码: sudo vi /etc/network/interfaces
2、配置DNS服务器: sudo vim /etc/resolv.conf
3、重启 sudo /etc/init.d/networking restart
设置开发板IP,参考uboot启动参数设置
4、查看DNS服务器: nslookup server
关于网络配置
=============================================================
1,配置IP地址、子网掩码、网关
sudo vi /etc/network/interfaces
2,手工启用/禁用网卡:
sudo ifconfig eth0 down --> 禁用
sudo ifconfig eth0 up --> 启用
3,ping命令
ping 192.168.100.1
ping www.baidu.com
检测网络是否通畅
4,如果不能连外网:
5.1 你的网段没有配对:192.168.100.xxx
5.2 DNS服务器没有搞对:
sudo vi /etc/resolv.conf
添加一行:
nameserver 202.96.134.133
(sudo apt-get remove --purge netmanager)
5.3 给ubuntu一个默认网关
sudo route add default gw 192.168.100.1
5,重启网络服务:
sudo /etc/init.d/networking force-reload
sudo /etc/init.d/networking restart
关于NFS:开发板与Ubunto之间的文件共享
=============================================================
1,查看NFS服务允许系统中有哪些目录可以被其他系统挂接:
showmount -e
2,修改了NFS服务的配置文件:
sudo vi /etc/exports
如果你,添加了这一行:
/home/gec/dir *(...)
3,重启NFS服务:
sudo /etc/init.d/nfs-kernel-server reload
sudo /etc/init.d/nfs-kernel-server restart
在主机端(ubuntu):
=====================
1,下载安装nfs服务:
sudo apt-get install nfs-kernel-server
2,配置
sudo vi /etc/exports
添加一句:
/opt/target *(rw,sync,no_subtree_check)
在开发板一端
====================
挂接这个目录:
sudo mount 192.168.100.ubuntuIP:/opt/target /mnt -t nfs -o nolock
关于SSH,putty 工具访问ubunto.
=============================================================
putty的使用:
ubunto的优化:www.gooldle.com
关于samba:window与Ubunto之间的文件共享
=============================================================
1,下载安装:
sudo apt-get update
sudo apt-get install samba
2,配置其配置文件:
[share]
path=/home/gec/Download
browseable=yes
public=yes
writable=yes
available=yes
3,重启samba服务:
sudo service smbd reload
sudo service smbd restart
/******************************************************************************/
软件安装篇:
1修改源列表网址 /etc/apt/sources.list
2更新本地源列表 sudo apt-get update
3下载并安装软件 sudo apt-get install XXX
4卸载软件 sudo apt-get remove xxx sudo dpkg -r XXX*
5彻底卸载软件 sudo apt-get remove xxx --purge
6手工安装软件 sudo dpkg -i xxx.deb
7修复损坏的软件 sudo apt-get install/remove xxx --fix-broken
sudo apt-get install/remove xxx --fix-missing
sudo apt-get install -f
aptitude search fcitx-bin*
apt-cache show XXXX :获取包的相关信息
常用命令:
apt-cache :查询软件包信息
apt-proxy: 搭建APT代理服务器
apt-show-versions:
apt-config:
apt-cdrom:
关于APT软件管理器
=============================================================
1,选择ubuntu的源列表
2,连接远端服务器并扫描其软件列表,下载到本地:
sudo apt-get udpate
3,下载并安装你的东西:
sudo apt-get install vim
即可。这样即自动下载vim的相关安装包(/var/cache/apt/archives),并自动安装。
4,ubuntu-12.04
安装软件的时候,如果拿到的是一堆源码,那么安装三部曲:
1 ./configure
2 make
3 make install
/******************************************************************************/
others:
给一个命令取一个别名:
=============================================================
/home/gec/->.bashrc
alias c='clear'
让bash重新读取其配置文件
source .bashrc
脚本:一堆命令的集合,完成更加强大的功能
根目录:系统所有文件的起点。
家目录:某个用户的专属目录:在你家里你可以做任何事情,即你有任意权限。
/home: 不是家目录,小区。
gec的家目录:/home/gec,这个目录是gec的家目录,gec的一般性文件都会放在这个地方,因此会比较大,所以一般会给他挂接一个独立的分区。
zhangsan的家目录:/home/zhangsan
....
/bin: binary,可执行的二进制文件所在的地方。
/sbin: super binary, 需要管理员权限来执行的二进制文件。
/dev: device,外设对应的设备节点文件。
/etc: 配置文件所在的地方。
/var: variable,存放很多易变的文件,会更容易产生磁盘碎片,因此一般在装系统的时候会给这个目录挂接一个独立的分区。
===============================================================================================
cat /proc/cpuinfo :读取有关cpu的信息
cat /proc/partitions
这些都是我个人学习Linux基础的积累,希望对各位学习Linux的朋友有所帮助,有什么问题请留言,大家一起交流。谢谢~!
:读取挂载的分区