linux学习心得.docx
《linux学习心得.docx》由会员分享,可在线阅读,更多相关《linux学习心得.docx(29页珍藏版)》请在冰豆网上搜索。
linux学习心得
目录
一常用命令2
1系统管理2
2程序安装与编译2
3文件管理:
3
4压缩解压:
3
5文本编辑3
6驱动相关4
7U盘分区4
二程序设计4
1汇编程序设计4
2shell编程5
3perl编程语言5
三小技巧6
3fedora中常用操作6
4cramfs文件解压7
5DNW操作命令7
6串口传文件命令8
7.eclipse中使用arm-linux-gcc8
9.Virtualbox使用技巧8
10.linux下的超级终端9
11Linux网络服务9
12根文件系统移植9
四驱动开发11
1Gadget驱动之U盘11
2查看设备的命令11
五、常用结构体11
1.structfile11
2.structfile_operations12
Structinode结构体15
structinode_operations16
structdevice18
字符设备21
终端设备相关结构体22
一常用命令
1系统管理
sudosu或sudo-s#获取root权限ubuntu中先输入sudopasswdroot设置root用户密码,然后直接root帐号登录
env#查看环境变量
exportNAME=....#设置环境变量例如exportCC=gcc-4.4,可命令行中使用,也可加入.bashrc
echo$name#查看环境变量,例如:
echo$CC
ps[-aux][-ef]#查看进程
top实时显示各进程资源占用状况,类似windows任务管理器
Kill[-9]pid#根据pid号结束进程
pgrepname#显示对应进程名的pid,类似命令pidof
pkillname#根据进程名结束相应进程
mount#查看文件系统
cat/proc/devices#查看设备
passwd#修改密码(要先取得root权限)
date#查看帮助date-s19/10/2006#修改日期date-s13:
12:
00#修改时间
chkconfig#Ubuntu中查看服务命令,要先安装才能使用
ifconfig#查看网络配置
ln-s/usr/src/linux-headers-2.6.38-8/include//usr/src/linux#创建符合链接
dmesg#查看USB转串口设备
echotest>/dev/led/0输出重定向,会带会产生换行符
echo–ntest>/dev/led/0不带换行符
2程序安装与编译
apt-getinstallkmplayer#apt-getupgrade升级软件。
fedora中采用yum命令安装软件
apt-getremovesmplayer#卸载软件
upgrade升级软件#ubuntu可命令安装的软件cramfsprogskmplayersmplayersamba等
rpm-irpm包名#rpm格式软件安装,参数-e删除-U升级-q查询
wgeturl#从网络现在安装
gcc#编译器,例如gccmain.c-omain详情看help.其他编译器如arm-linux-gcc用法一样
arm-linux-objcopy-Obinarymainmain.bin#生成.bin文件
readelf-hexename#查看编译后的程序详情
g++
gdb#调试
./file#执行,如./cofigure常用于编译前配置文件,
makeclean#删除之前编译产生的文件,参数mrproper除进行clean操作外,还删除.config等文件,distclean比前两者更彻底,还删除编辑备份文件,补丁等,使源代码树变为初始状态
makemenuconfig#fedora下要先安装ncursesncurses-devel
make#编译,搜索makefile内核编译makezImage模块编译makemodules
makeinstall#安装
3文件管理:
cd./hb#进入目录.当前目录..返回上一目录
chmoda+rxx*###为当前目录的所有文件所有用户添加rwx权限,实际中rwx三个权限可选择性添加
ls#当前目录文件,参数-a显示所有文件(包括隐藏)-l显示详细信息
filefilename#查看文件类型
rmfile2#删除file2
rm-rffoldername#当提示目录非空时使用此命令
mvhbhaha#将hb更名为haha
mv./音乐/newfile./视频#文件移动(也可移动文件夹)
cp./音乐/newfile./视频#文件复制(也可复制文件夹)
mkdirhb#新疆目录加参数-p建立有层次的目录,如:
mkdir-phb/work
rmdirhb#删除目录
difffile1file2#比较两个文件差异
du#磁盘占用
4压缩解压:
tarcfvzout.tar.gzfile1file2#将file1file2压缩为out.tar.gz
tarxfvzfile1.tar.gz[-C/]#前面一个参数file1为需要解压的文件,可以指定为其他目录的文件,加参数-C后改变输出路径,不加默认当前目录
tarxfvjfile1.tar.bz2#解压
5文本编辑
geditfilename#有则打开,没有会自动创建
vifilename
vi编辑器使用:
1)启动。
vifilename#打开文件
2)模式切换。
按insert进入插入模式,再按ESC键返回command模式
3)文件保存与退出。
命令模式下先输入冒号,然后输命令,包括:
w:
保存不退出
q!
:
不保存推出
wq!
:
保存退出
wfilename:
另存为filename
wq!
filename:
另存为filename后退出
6驱动相关
modprobename#加载模块,加载后可在proc/modules下看到
insmodname#加载模块,例如insmodhello.kormmodhello(前面一个命令加后缀名,后面一个不加)
rmmodname#卸载模块
mknod/dev/namec2540#创建设备节点,名字,字符型设备,主设备号此设备号
lsname-l#查看节点,创建节点后就可以才/dev/下看到相应设备
7U盘分区
sudofdisk/dev/sdb
二程序设计
1汇编程序设计
#hello.s(AT&T格式)
.data#数据段声明
msg:
.string"hello,word!
\n"#要输出的字符串
len=.-msg#字符串长度
.text#代码段声明
.global_start#指定入口函数
#在屏幕上显示一个字符串
_start:
movl$len,%edx#参赛三:
字符串长度
movl$msg,%ecx#参赛二:
要显示的字符串
movl$1,%ebx#参数一:
文件描述符(stdout)
movl$4,%eax#调用内核号(sys——write)
int$0x80#调用内核功能
#退出程序
movl$0,%ebx#参数一:
退出代码
movl$1,%eax#调用系统号(sys_exit)
int$0x80#调用内核功能
保存后输入以下命令as-ohello.ohello.s#编译
ld-s-ohellohello.o#连接
./hello#运行
;hello.asm(intel格式)要先安装nasm
section.data;数据段声明
msgdb"hello,world!
",0xA;要输出的字符串
lenequ$-msg;字符串长度
section.text;代码段声明
global_start;指定入口函数
_start:
;在屏幕上显示一个字符串
movedx,len;参赛三:
字符串长度
movecx,msg;参赛二:
要显示的字符串
movebx,1;参数一:
文件描述符(stdout)
moveax,4;调用内核号(sys——write)
int0x80;调用内核功能
;退出程序
movebx,0;参数一:
退出代码
moveax,1;调用系统号(sys_exit)
int0x80;调用内核功能
保存后输入:
nasm-felfhello.asm
ld-s-ohellohello.o
./hello
2shell编程
#!
/bin/bash
#文件名为myshell.sh首句不是注释,标示要使用的shell,
echo$SHELL
echo"hello,myshell"#显示字符串
运行:
./myshell.sh
3perl编程语言
#!
/usr/bin/perl
#文件名为hello.pl,每个perl程序都以此开头
print'hello,thisisaperlprogram';#显示一个字符串
输入./hello.pl#运行
qemu虚拟机使用
qemu-hda/home/hb/下载/linux-0.2.img#后面为镜像文件路径
三小技巧
1vmwaretools安装说明:
解压之后,运行./vmware-install.pl
途中如果提示Permissiondenied,修改相应文件权限,然后重新运行上次为执行完的命令直至结束
以下为中途停止后要重新执行的命令
./vmware-config-tools.pl
/usr/bin/vmware-toolbox
安装完后重启即可
2自动交叉编译工具cross-ng安装
#ubuntu下安装的软件较少,特别是libncurses5-dev、automake
apt-getinstallbuild-essential#安装常用开发包
apt-getinstallbisonflexautomakelibtooltexinfocvscurl#缺少texinfo时提示缺少makeinfo
apt-getinstallgcjg++subversiongawklibncurses5-devzliblg-devpatch#缺少libncurses5-dev时提示缺少库ncurses
wgethttp:
//ymorin.is-a-geek.org/download/crosstool-ng/crosstool-ng-1.5.2.tar.bz2
tarjxvfcrosstool-ng-1.5.2.tar.bz2从网上下载与解压
./configure--local
make
makeinstall
./ct-ngmenuconfig出现图形界面
./ct-ngbuild编译
3fedora中常用操作
yumupdate#更新
yum-help#查看帮助,具体用法
rpm-ifilename安装rpm格式的安装包
1)安装ibus-pinyin输入法
yuminstallibus-pinyin
ibus-setup#设置输入法
2)访问共享:
1选择连接到服务器2选择windows共享3输入服务器IP4输入共享文件夹,例如f
3)开启NFS
lokkit#选择关闭防火墙
/etc/init.d/nfsstart#启动nfs
serviceconf#设置服务
4cramfs文件解压
简要说,就是把cramfs文件当成一个分区挂载到本地系统,然后就可以对它进行操作了。
假设要解压的文件是LJD2440-II.cramfs
(1)将LJD2440-II.cramfs拷贝到任意目录下
(2)在该目录下建立两个文件:
mkdirroms
mkdirtmp
(3)将LJD2440-II.cramfs挂接到roms目录
mountLJD2440-II.cramfsroms–oloop
(4)将roms目录下的内容压缩
tar–cvf1.tarroms
这样将在roms的上一级目录产生一个1.tar的包
60
(5)将包解压到tmp目录下。
umountroms;卸载挂载
cd..;进入上一级目录
mv1.tartmp;
cdtmp;
tar–xvf1.tar;将打包的根文件系统里的内容解压
rm1.tar
5DNW操作命令
**********启动方式切换****************************
**********SD01111100*****************************
**********flash01100100*****************************
nandflash分区信息见/arch/arm/plat-s3c24xx/common-smdk.c
1由于板子之前预装winCE,如果要烧写linux,要格式化flash
通过eboot启动后,安空格,选择A项即可
2将u-boot-movi.bin烧至SD卡
3将u-boot-nand.bin烧写至nandflash
首先设置SD启动方式
dnwc0008000
usbport->transmit
nanderase0100000
nandwritec00080000100000
4设置bootargs,bootcmd
首先更改启动方式为nand启动
setenvbootargs"root=/dev/mtdblock2rootfstyle=cramfsconsole=tty0console=ttySAC0,115200"
setenvbootcmdnandread0xc00080000x1000000x200000\;bootm0xc0008000
saveenv
5烧写zImage至nandflash(写入kernel)
重启
dnwc0008000
tansmitzImage(读到ram)
nanderase100000200000#起始地址为0x100000,大小0x200000字节即2M
nandwritec0008000100000200000
6烧写roots_qt.cramfs至nandflash(写入根文件系统)
重启
dnwc0008000
传输rootfs_qt.cramfs
nanderase3000003000000
nandwritec00080003000003000000
挂载SD卡:
mount-tvfat/dev/mmcblk0p1/tmp/sd/
Vfat为文件类型,/dev/mmcblk为要挂载的设备路径,/tmp/sd挂载的路径
进入SD卡:
cd/tmp/sd
卸载SD卡:
umount/tmp/sd/
内核启动相关文件:
arch/arm/boot/compressed/head.s
init/main.c->strart_kernel()
6串口传文件命令
Windows超级终端,注意硬件控制流设为无,其他一般默认配置
开发板——>PCszfilename默认保存到超级终端的目录
开发板<——PCrz,右键发送,保存到开发板当前目录,也可直接发送,不用输入命令
Linux下该命令仍然适用
7.eclipse中使用arm-linux-gcc
1下载linux下的eclipse,CDT,jdk
2新建cproject,选择crossGCC,设置prefix=arm-linux-path=/opt/toolchain/4.3.2/bin(注意该目录下有arm-linux-为前缀的命令)
3新建c文件,点保存,再点build(工具栏的小锤子图标)
9.Virtualbox使用技巧
串口添加:
windows中选择启用串口,端口模式hostdevice,文件路径com1
文件共享:
1)设备-安装增强功能
2)设备-分配数据空间,选择永久空间,名称为E_DRIVE
3)Linux下新建一目录E盘,输入命令mount-tvboxsfE_DRIVE/home/hb/E盘/
4)卸载该目录umount/home/hb/E盘/
10.linux下的超级终端
先安装mincom
输入minicom-s进入配置菜单,进入serialportsetup,注意一定要把HardwareFlowControl也设置成None,其他的一般默认配置,最后Savesetupasdfl并退出,再次输入minicom命令
Com1在linux下称为ttyS0
Usb转串口线称为ttyUSB0,ttyUSB1等,查看方法ls/dev/ttyUSB*
Windows下使用超级终端也注意将硬件控制流设为无。
按ctrl+A,在按z出现菜单选项,可发送、接受文件,协议选择zmodem
输入echotest>/dev/ttyS0会把单词test发送到ttyS0连接的设备上
11Linux网络服务
1)SSH
1linux下安装sshd,命令apt-getinstallopenssh-server
2windows下安装SSHsecureshell,点快速连接,即可通过shell命令登陆到linux,还能ftp文件共享
2)开启linuxftp服务
1输入命令apt-getinstallvsftpd安装ftp
2通过输入stopvsftpd停止服务,startvsftpd启动服务
3相关配置文件在/etc/目录下
3)Linux下局域网共享Samba,输入apt-getinstallsamba,右键目录,选择共享
4)HTTP服务,输入命令apt-getinstallapache2
5)远程桌面连接,点系统-首选项-远程桌面,勾选运行其他人查看和控制。
然后再windows上运行VNCviewer,输入IP即可连接
12根文件系统移植
1修改分区信息
/arch/arm/plat-s3c24xx/common-smdk.c
2配置内核,勾选相应操作系统支持
进入Filesystem,若要支持ext3,勾选EXt3journallingfilesystemsupport
EXt3extendedattributes,
若要支持carmfs,进入MIscellaneousfilesystem,勾选cramfs
3修改启动参数
可在内核配置时,进入boot项配置启动参数,也可在uboot中执行如下命令:
setenvbootargsroot=/dev/mtdblock2rootfstype=ext3console=ttySAC0,115200
Saveenv
根文件系统启动顺序
/etc/inittab
/etc/init.d/rc.S
/usr/etc/rc.local(启动qtopia包含在内)
其中rc.S中包含有path的定义,一些开机启动项,如:
/etc/rc.d/init.d/mtstart
echo"">/dev/tty1
echo"SpanMulti-touchx2">/dev/tty1
echo"Servicing...">/dev/tty1
sleep1
/etc/rc.d/init.d/包含一些服务
以leds为例说明:
#!
/bin/sh
base=led-player
#Seehowwewerecalled.
case"$1"in#“$1表示第一参数,case语句
start)#选项参数
/usr/bin/$baseshell命令后加&表示后台执行
;;#该选项结束
stop)
pid=`/bin/pidof$base`
if[-n"$pid"];then#判段是否大于0
kill-9$pid
fi
;;
esac#case语句结束
exit0
四驱动开发
驱动调试信息函数
Printkdev_infodev_warndev_deg
1Gadget驱动之U盘
直接挂载开发板上的U盘,insmodg_file_storage.kofile=/dev/udiskstall=0removable=1
1建立img文件
ddif=/dev/zeroof=vfat.imgbs=1Mcount=20
losetup/dev/loop0vfat.img
mkfs.vfat/dev/loop0
mkdirvfat_mount_point
mount-tvfat/dev/loop0vfat_mount_point
2配置内核
选择/usb/gadget/filed-backstoragegadget(filed-backstoragetestingversion可不选),makemodules编译成模块
3加载模块
insmodg_file_storage.kofile=/test/vfat.imgstall=0removable=1
字符设备注册函数
intregister_chrdev(unsignedintmajor,constchar*name,structfile_operations*fops);
注册后可在proc/devices下查看,若要登记到文件系统,调用devfs_register_chrdev,注册后被安装到/dev目录,同时在devfs中生成设备文件节点
File结构体下的private_data可指向任意数据类型
2查看设备的命令
调用
cd/proc
cat/proc/tty/drivers
catslabinfo
catdevices
catinterrupts
查看所以设备的节点号
cd/dev
ls–l
五、常用结构体
1.structfile
structfile结构体定义在include/linux/fs.h中定义。
文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的structfile。
它由内核在打开