嵌入式开发学习历程(一)——Linux系统入门

本人普通本科学生,浑浑噩噩度过大学三年时间。直到临近离校实习,才发现自己学到的知识微不足道。既不满足于现状,又不愿意花费高昂学费进培训机构,只好在秋招前的这段时间补补书籍,看看网课,为改变自己的命运再努力一把。在接下来的时间里,我会把自己的学习笔记进行整理上传,加深对技术的理解,避免遗忘。

为什么要学习linux操作系统?

事实上,ARM通常都是用来做比较复杂的系统的,而且一般都是多任务系统的,当任务比较多,程序比较大的时候,只用汇编和C恐怕难以胜任,所以我们应该给ARM配一个操作系统,用来管理这些任务,那么对于ARM,我们可以作使用哪些操作系统呢?嵌入式操作系统通常有VxWorks,WinCE,uC\FreeRTOS,Linux/ucLinux等。而uC\FreeRTOS、Linux因为其免费,而且开源,深受学习者和小公司的欢迎。
uCOS操作系统内核很小,特别适合初学,而且它是占先式内核,是一个实时的操作系统,特别适合实时性要求较高的场合,其内核很小当然其功能当然也就没有linux强大,而且uCOS的图形用户界面(GUI)还是刚有雏形,没有linux的GUI好,而它的GUI是收费的。这样的话只是linux是最好了,但是linux本身不是实时的操作系统,不适合实时性高的场合,于是ucLinux产生了,ucLinux是一个实时操作系统(RTOS),因此学习ARM+ucLinux的人较多。
所以,如果只搞uCOS+ARM,那就可以不学linux了,如果想学习ARM+ucLinux,要在ARM上移植linux,那么移植后,这个装有linux的ARM处理器,当然只能运行linux环境下编译出来的应用程序(这里还有一个交叉编译的概念需要正确理解),所以理所当然要学linux。我在学时,曾对开发板跑RTOS产生兴趣,还专门询问过不少老师和学长,他们大致认为,uCOS虽然更易于学习,但最终工作开发的方向也会转向Linux开发,所以还是先学好Linux操作系统再回来看RTOS吧。通常小红帽Linux、ubuntu Linux 使用比较广泛,那么不能在Windows下开发ARM+ucLinux吗?其实倒是可以在Windows使用虚拟机软件VMware装一个linux。
嵌入式 Linux 最主要的工作是让目标板能启动 Linux 系统,启动 Linux 系统的核心工作就是启动 Linux 内核,启动 Linux 内核的核心工作就是让这个 Linux 内核能支持你这个设备,Linux 内核能支持你这个设备的前提就是 Linux 内核经过你的改进后确实能启动,你改进内核的前提就是你会 Linux 内核。

Linux文件系统是一个树形的分层组织结构。

文件系统层次结构标准FHS(Filesystem Hierarchy Standard)
FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。
其主要目录包括:

/bin:二进制(binary)目录下存放二进制文件。

目录名称 存放文件类型
/boot: 存放系统启动时要用到的程序。
/dev: 包含了所有Linux系统中使用的外部设备。
/etc: 存放系统管理时要用到的各种配置文件和子目录。
/lib: 存放系统动态连接共享库。
/home: 普通用户的主目录。
/root: 根用户的主目录。

Linux的命令(也包括文件名等等)对大小写是敏感的,也就是说,如果你输入的命令大小写不对的话,系统是不会做出你期望的响应的。
如果你的英文足够好,那完全可以不靠任何人就精通linux,只要你会用man。Man实际上就是察看指令用法的help,学习任何一种UNIX类的操作系统最重要的就是学会使用man这个辅助命令。man是manual(手册)的缩写字,它的说明非常的详细,但是因为它都是英文,看起来非常的头痛。建议大家需要的时候再去看man,平常吗,记得一些基本用法就可以了。
浏览目录命令:
当打开命令终端窗口,用户处于自己用户主目录的位置。
ls——显示目录下的内容
ls这个命令就相当于dos下的dir命令,这也是Linux控制台命令中最为重要几个命令之一。ls最常用的参数有三个: -a ,-l, -F。
ls -a
Linux上的文件以“.”开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除了显示 一般文件名外,连隐藏文件也会显示出来。
ls -l
  这个命令可以使用长格式显示文件内容,如果需要察看更详细的文件资料,就要用到ls -l这个指令。
ls –F(注意,是大写的F)
  使用这个参数表示在文件的后面多添加表示文件类型的符号,例如*表示可执行,/表示目录,@表示连结文件,这都是因为使用了-F这个参数。但是现在基本上所有的Linux发行版本的ls都已经内建了-F参数,也就是说,不用输入这个参数,我们也能看到各种分辨符号。
  
pwd——显示当先位置
执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称。
cd——切换目录
  这个命令是用来进出目录的,有两点我补充一下。首先,和dos不同的是Linux的目录对大小写是敏感的,如果大小写没拼对,你的cd操作是成功不了的。其次,cd如果直接输入,cd后面不加任何东西,会回到使用者自己的Home Directory。假设如果是root,那就是回到/root.这个功能同cd ~是一样的。
mkdir、rmdir——创建、删除目录
  mkdir命令用来建立新的目录,rmdir用来删除已建立的目录。
cp——文件复制
  具体用法是:cp –r 源文件(source) 目的文件(target)
  参数r是指连同源文件中的子目录一同拷贝。熟悉dos的读者用起这个命令来会觉得更方便,毕竟比在dos下面要少敲两下键盘。
rm——文件删除
  这个命令是用来删除文件的,和dos下面的rm(删除一个空目录)是有区别的,大家千万要注意。rm命令常用的参数有三个: -i,-r,-f。
  比如我现在要删除一个名字为test的一个文件:rm –i test
  系统会询问我们:“rm:remove ‘test’?y”,敲了回车以后,这个文件才会真的被删除。之所以要这样做,是因为linux不象dos那样有undelete的命令,或者是可以用pctool等工具将删除过的文件救回来,linux中删除过的文件是救不回来的,所以使用这个参数在删除前让你再确定一遍,是很有必要的。
  rm –r 目录名:这个操作可以连同这个目录下面的子目录都删除,功能上和rmdir相似。
  rm –f 文件名(目录名):这个操作可以进行强制删除。
  
mv——移动
  这个命令的功能是移动目录或文件,引申的功能是给目录或文件重命名。它的用法同dos下面的move基本相同,这里不再多讲。当使用该命令来移动目录时,他会连同该目录下面的子目录也一同移走。如果你想给一个文件或目录重命名时可以用以下方法:mv 原文件(目录)名 新的文件(目录)名。
cat——文本输出命令
  这个命令是linux中非常重要的一个命令,它的功能是显示或连结一般的ascii文本文件。cat是concatenate的简写,类似于dos下面的type命令。它的用法如下:
  cat text 显示text这个文件;
  cat file1 file2 依顺序显示file1,file2的内容;
  cat file1 file2>file3 把file1,file2的内容结合起来,再“重定向(>)”到file3文件中。

clear——清屏
  这个命令是用来清除屏幕的,它不需要任何参数,如果你觉得屏幕太紊乱,就可以使用它清除屏幕上的信息。另外一个快捷方式是ctrl+l
  
文件权限
文件的权限类型:读(r),写(w),执行(x),无权限(-)。
权限:创建者,同组用户,其他用户。
例如:rwxr-----:创建者拥有所有权限,同组用户可读不可写、执行,其他用户无任何权限。

VIM编辑器的使用
Vi/vim是linux系统的基础的文本编辑器

-1. 三种模式以及模式的切换命令
命令行模式:用户在编辑文件时,最初进入的该文件的编辑页面。可以移动光标查看文件,进行复制,剪切,粘贴等操作。

插入模式:进入文件编辑,按ESC可以回到命令行模式
a 从当前光标之后的位置开始插入
i 从当前光标之前的位置开始插入
o 在光标下一行插入空行
A 从当前行尾开始插入
I 从当前行首开始插入
O 在光标上一行加入空行
ESC 退出到命令行模式

底行模式:光标位于屏幕的底行。可以进行文件的保存,查找,替换,列出行列号等操作。

:!command 不退出编译器,执行linux指令

- 2.熟悉拷贝和粘贴命令

yy 复制
y0 复制本行光标至行首的所有字符
y$ 复制本行光标至行尾的所有字符
range y(1,10y) 块复制(1到10行复制)
dd 剪切/删除
d0 剪切复制本行光标至行首的所有字符
d$ 剪切复制本行光标至行尾的所有字符
range d(1,10y) 块剪切(1到10行复制)
p 粘贴
u 取消上一次操作
N x 剪切光标后的N个字符

-3. 熟悉保存和退出命令

:q 退出没有修改的文件
:q! 强制退出,不保存
:w 保存文件
:x == :wq 保存文件并退出
:w file 另存为file名称
:r file 读入file指定的文件内容插入文本
  • 4.光标命令
:1G 回到第一行
:G 回到最后一行
:数字N 插入到第N行
:set nu/nonu 打开、关闭行号
  • 5.查找命令

/string 查找文本中相应的字符串

/string 查找文本中相应的字符串
  • 6.替换命令
:s /oldestr /newstr 替换对应的第一个字符串
:s /oldestr /newstr/g 替换当前行所有对应字符串
:.,$ s /oldestr /newstr/g 替换当前行到最后行对应字符串
:1,$ s /oldestr /newstr/g 替换全文对应字符串
:% s /oldestr /newstr/g 替换全文对应字符串

程序的编译和调试

  • GCC编译器的使用
    可以支持包括(.c:c语言源代码 .h:头文件 .i:预处理过的源代码 .s:汇编语言源代码文件 .o:编译后的目标文件)以上后缀文件
    编译指令:gcc 源文件名 -o 执行文件名
    ./执行文件名 查看输出结果
    -o 输出可执行文件
    -c 只输出目标代码,不输出可执行文件
    -g 用于调试

  • 程序调试
    利用_ FILE _
    _ LINE
    _ FUNCTION 来进行简单的调试
    比如在main函数内加入printf(”%s,%s,%d\n”, _ FILE _ ,
    _ FUNCTION __ ,__ LINE __);

你可能感兴趣的:(嵌入式开发学习历程(一)——Linux系统入门)