linux--裸机开发

一.Shell命令

1、目录信息查看命令ls

ls -a 显示目录所有文件及文件夹,包括隐藏文件,比如以.开头的

2、目录切换命令cd

3、当前路径显示命令pwd

4、系统信息查看命令uname

5、清理屏幕命令clear

6、显示文件内容命令cat

7、切换用户身份命令sudo

8、文件拷贝命令cp

9、切换用户命令su

10、移动文件命令mv

11、创建文件夹命令mkdir

12、创建文件命令touch

13、删除命令rm

14、目录删除命令rmdir

15、显示网络配置信息命令ifconfig

16、重启命令reboot

17、关机命令poweroff

18、系统帮助命令man

19、数据同步写入磁盘命令sync

20、查找文件命令find

21、查找内容命令grep

22、文件夹大小查看命令du

23、磁盘空间检查命令df

24、使用gedit打开某个文件命令gedit

25、当前的系统进程查看命令ps

26、进程实时运行状态查看命令top

27、文件类型查看命令file

28、xx --help  查看命令帮助

30、进入Root用户  sudo su       返回用户   sudo  su   电脑名(小路)

31、finger查找

32、修改文件权限命令  chmod命令

33、修改文件所属用户 chown命令

二、Ubuntu文件系统结构

/bin 存放二进制可执行文件,这些命令在单用户模式下也能够使用。可以被root和一般的账号使用。

/boot Ubuntu内核和启动文件,比如vmlinuz-xxx。gurb引导装载程序。

/dev 设备驱动文件

/etc 存放一些系统配置文件,比如用户账号和密码文件,各种服务的起始地址。

/home 系统默认的用户主文件夹,一般创建用户账户的时候,默认的用户主文件夹都会放到此目录下。

/lib 存放库文件

/media 此目录下放置可插拔设备,比如SD卡,或者U盘就是挂载到这个目录中。

/mnt 用户可使用的挂载点,如果要挂载一些额外的设备,那么就可以挂载到此处。

/opt 可选的文件和程序存放目录,给第三方软件放置的目录。

/root root用户目录,也就是系统管理员目录。

/sbin 和/bin类似,也是存放一些二进制可执行文件。sbin下面的一般是系统开机过程中所需要的命令。

/srv 服务相关目录。比如网络服务。

/sys 记录内核信息,虚拟文件系统。

/tmp 临时目录

/var 存放一些变化的文件,比如日志文件

/usr usr不是user的缩写,而是UNIX Software Resource的缩写,存放于系统用户有关的文件,会占用很大的存储空间!

/proc 虚拟文件系统,数据放置到内存中,存放系统运行信息

三、Ubuntu磁盘文件

/dev/sd*文件,此类文件是磁盘设备文件,并不能直接访问磁盘,必须要将磁盘挂载到某一个目录下才可以访问。

/dev/sdb和/dev/sdb1是U盘的设备文件。

/dev/sdb表示U盘,/dev/sdb1表示U盘的第一个分区。

四、磁盘和目录的容量查询命令

        df:列出文件系统的整体磁盘使用量。主要查看个文件系统的使用量,

        du:评估文件系统的磁盘使用量,主要查看单个文件的大小。

五、磁盘挂载与卸载,分区和格式化、

      1、磁盘的挂载和卸载

            mount和umount命令

      2、磁盘分区

            fdisk命令

       3、磁盘格式化

            磁盘分区创建好以后就可以格式化磁盘,使用命令mkfs。如:

            mkfs -t vfat /dev/sdx

 六、Linux下常用的压缩格式

         Linux下常用的压缩扩展名有:.tar、.tar.bz2、.tar.gz。

 七、Windows下7ZIP软件的安装

        因为Linux下很多文件是.bz2,.gz结尾的压缩文件,因此需要在windows下安装7ZIP软件。

 八、gzip压缩工具

        .gzip工具负责压缩和解压缩.gz格式的压缩包。

         gzip xxx //压缩

         gzip -d xxx.gz //解压缩

         gzip对文件夹进行压缩

         gzip -r xxx //对文件夹进行压缩

         gzip -rd xxx.gz //对文件夹进行解压缩

         gzip虽然可以对文件夹进行压缩,但是并不能提供打包的服务,只是对文件夹中的所有文件   进行了单独的压缩。

  九、bzip2压缩工具

         和gzip类似,只是bzip2工具负责压缩和解压缩.bz2格式的压缩包。

         bzip2 -z xxx //压缩

         bzip2 -d xxx.gz //解压缩

  十、tar打包工具

         tar工具参数:

         -f,使用归档文件或 ARCHIVE 设备

         -c:创建新归档,创建压缩文件

         -x:从图档中解出文件,解压缩

          -j:使用bzip2压缩格式。

          -z:使用gzip压缩格式

          -v:打印出命令执行过程。

           tar工具提供打包服务,就是将多个文件打包,比如

           tar -vcf test.tar test //将test打包成test.tar

           tar -vxf test.tar //解包

上面的tar命令只提供了打包和解包的功能,tar在提供打包和解包的同时使用gzip/bzip2进行压缩,实现类似windwos下winRAR软件的命令。

1、对.tar.bz2进行压缩和解压缩

tar -vxjf xxx.tar.bz2 解压缩

tar -vcjf xxx.tar.bz2 xxx 压缩

2、对.tar.gz进行压缩和解压缩

tar -vxzf xxx.tar.gz //解压缩

tar -vczf xxx.tar.gz xxx //压缩

十一、其他格式的压缩和解压缩

1、.rar格式

 需要先安装rar:sudo apt-get install rar

  rar x xxx.rar //解压缩

  rar a xxx.rar xxx //压缩

2、.zip格式

zip格式压缩使用“zip“命令:

zip -rv xxx.zip xxx

zip格式解压缩使用“unzip”命令:

unzip -v xxx.zip

十二、Linux用户

Linux是一个多用户操作系统,不同的用户拥有不同的权限。可以查看和操作不同的文件。 Ubuntu有三种用户:

1、初次创建的用户。

2、root用户

3、普通用户。

初次创建的用户权限比普通用户多,但是没有root用户多,初次创建的用户可以创建普通用户。

Linux用户记录在/etc/passwd这个文件内。

Linux用户密码记录在/etc/shadow这个文件内。

每个用户都有一个ID,叫做UID。

十三、Linux用户组

为了方便管理,将用户进行分组。这样就可以设置非本组人员不能访问某些文件。每个用户可以属于多个不同的组。

用户:家里有你、弟弟、妹妹个人,每个人都有自己的房间,你们三个人都是用户,你们都不能随便的乱翻别人的房间。

用户组:你们三个都是一个家庭的,也就是属于同一个用户组,你们三个可以共用厨房,书房等空间。

因此:

用户和用户组的存在就是为了控制文件的访问权限的。

每个用户组都有一个ID,叫做GID。

用户组信息存储在/etc/group文件中。

十四、创建用户和用户组

1、图形化界面创建

要使用图形化界面创建用户和用户组的话就需要安装gnome-system-tools这个工具:

sudo apt-get install gnome-system-tools

2、命令创建用户和用户组

添加用户:adduser命令,adduser 用户名

用户查询:finger命令,finger 用户名

修改用户密码:passwd命令,passwd 用户名

删除用户:deluser命令,deluser 用户名

添加用户组:addgroup命令,addgroup 用户组名

显示组内用户名:groups命令,groups 用户组名

删除用户组:delgroup命令,delgroup用户组名

十六、Ubuntu/Linux文件权限

文件权限是指不同的用户或用户组对某个文件拥有的权限,文件的权限分为三种:

r:读

w:写

x:可执行。

文件描述形式如下:

-rw-rw-r—就是文件权限,第一位表示文件类型,剩下的每三位表示一组权限。分别对应拥有者权限、拥有者所在组权限、其他用户权限。

可以使用二进制表示文件权限。

r=4

w=2

x=1                           777

 chmod      chown     777    所有权限

a.c文件信息:

- rw- rw- r--,a.c所属用户拥有读写权限无可执行权限。组内其他用户拥有读写权限无可执行权限,其他用户仅有可读权限。

十七、Linux连接文件

Linux有两种连接文件:符号连接(软连接)和硬链接,符号链接类似Windows下的快捷方式。硬链接通过文件系统的inode连接来产生新文件名,而不是产生新文件。

inode:记录文件属性,一个文件一个inode。inode相当于文件ID,查找文件的时候要先找到inode,然后才能读出文件的内容。

十八、ln命令

ln命令用于创建连接文件:

ln [选项] 源文件 目标文件

选项:-s 创建符号链接(软连接)

-f 强制创建连接文件,如果目标存在,那么先删除掉目标文件,然后再建立连接文件。

十九、硬连接

硬链接是多个文件都指向同一个inode,硬链接知识点:

①、具有相同inode的多个文件互为硬链接文件,创建硬链接相当于文件实体多了入口。

②、对于硬链接文件,只有删除了源文件以及对应的所有硬连接文件,文件实体才会被删除。

③、根据硬链接文件的特点,我们可以通过给文件创建硬连接的方式来防止文件误删除。

④、不论修改源文件还是连接文件,另一个文件的数据都会被改变。

⑤、硬连接不能跨文件系统。

⑥、硬连接不能连接到目录。

因为以上这些限制,硬链接其实不常用。

二十、符号连接(软连接)

符号连接类似Windows下的快捷方式,符号链接也叫做软连接,软连接要用的多。符号连接相当于创建了一个独立的文件,这个文件会让数据读取指向它连接的哪个文件的文件名。软连接的特点:

①、可以连接到目录。

②、可以跨文件系统。

③、删除源文件以后,软连接文件也就“打不开了”。

④、符号连接文件通过->来指示具体的连接文件。

⑤、符号连接要使用绝对路径,否则连接出问题。

二十一、vim编辑器三种工作模式

vi xxx 使用vi编辑器打开文件。

一般模式(指令模式):默认模式,用vi打开一个软件以后自动进入到此模式。

编辑模式:一般模式中无法编辑文件,要编辑文件就要进入编辑模式,按下“i、I、a、A、o、O、s、r”等就会进入到编辑模式。一般按下“a”进入编辑模式。按下ESC键可退出编辑模式。

命令行模式(底行模式):先进入到一般模式,然后输入:、/、?这三个中的任意一个就可以进入到命令行模式。

/xxx,表示在文件中查找xxx

当文件编辑好以后,输入:wq来保存退出。:q退出,:q!不保存退出,:w保存。

1、按下键盘上的上下左右键来控制光标。

一般模式下:

1、dd,删除光标所在行,ndd,删除光标所在行及其下n行。

2、u,撤销,恢复上一步。

3、. ,重复前一个操作。

4、yy,复制光标所在行

5,nyy,复制光标所在向下n行,比如10yy就是复制光标下10行。

6,p和P,p为复制到光标下一行,P复制到光标上一行。

二十二、GCC 编译器
gcc 命令
gcc [选项] [文件名字]
主要选项如下:
-c:只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。
-o:<输出文件名> 用来指定编译结束以后的输出文件名,如果不使用这个选项的话 GCC 默
认编译出来的可执行文件名字为 a.out。
-g:添加调试信息,如果要使用调试工具(如 GDB)的话就必须加入此选项,此选项指示编
译的时候生成调试所需的符号信息。
-O:对程序进行优化编译,如果使用此选项的话整个源代码在编译、链接的的时候都会进
行优化,这样产生的可执行文件执行效率就高。
-O2:比-O 更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢。

二十三、make工具和Makefile文件的引入

Make工具

当源码文件比较多的时候就不适合通过直接输入gcc命令来编译,这时候就需要一个自动化的编译工具.

make:一般说GNU Make,是一个软件,用于将源代码文件编译为可执行的二进制文件,make工具主要用于完成自动化编译。make工具编译的时候需要Makefile文件提供编译文件。

Makefile:make工具所使用的文件,Makefile指明了编译规则。

二十四、使用make工具和Makefile文件编译

但是这样就又有一个问题,如果修改的文件一多,我自己可能都不记得哪个文件修改过了,
然后忘记编译,然后……,为此我们需要这样一个工具:
1、如果工程没有编译过,那么工程中的所有.c 文件都要被编译并且链接成可执行程序。
2、如果工程中只有个别 C 文件被修改了,那么只编译这些被修改的 C 文件即可。
3、如果工程的头文件被修改了,那么我们需要编译所有引用这个头文件的 C 文件,并且
链接成可执行文件。
很明显,能够完成这个功能的就是 Makefile 了,在工程目录下创建名为“Makefile”的文件,
文件名一定要叫做“Makefile”!!!区分大小写的哦

Makefile 里面是由一系列的规则组成的,这些规则格式如下:
目标…... : 依赖文件集合……
命令 1
命令 2
……

命令列表中的每条命令必须以 TAB 键开始,不能使用空格!
make 命令会为 Makefile 中的每个以 TAB 开始的命令创建一个 Shell 进程去执行。

总结一下 Make 的执行过程:
1、make 命令会在当前目录下查找以 Makefile(makefile 其实也可以)命名的文件。
2、当找到 Makefile 文件以后就会按照 Makefile 中定义的规则去编译生成最终的目标文件。
3、当发现目标文件不存在,或者目标所依赖的文件比目标文件新(也就是最后修改时间比
目标文件晚)的话就会执行后面的命令来更新目标。

Makefile 有一种特殊的目标——伪目标,一般的目标名都是要生成的文件,而伪目标不代
表真正的目标名,在执行 make 命令的时候通过指定这个伪目标来执行其所在规则的定义的命
令。
使用伪目标主要是为了避免 Makefile 中定义的执行命令的目标和工作目录下的实际文件出
现名字冲突,有时候我们需要编写一个规则用来执行一些命令,但是这个规则不是用来创建文
件的
clean:
rm *.o
rm main
上述规则中并没有创建文件 clean 的命令,因此工作目录下永远都不会存在文件 clean,当
我们输入“make clean”以后,后面的“rm *.o”和“rm main”总是会执行

二十五、Makefile基本语法

    参考I.MX6U 嵌入式 Linux 驱动开发指南Makefile函数使用

 命令列表中的每条命令必须以 TAB 键开始,不能使用空格!

命令列表中的每条命令必须以 TAB 键开始,不能使用空格!

命令列表中的每条命令必须以 TAB 键开始,不能使用空格!

二十六、什么是shell脚本

我们已经能够熟练的在终端中输入命令来完成一些常用的操作,但是我们都是一条一条输入命令。这样会很麻烦,那么有没有一种方式可以将很多条命令放到一个文件里面,然后直接运行这个文件即可?肯定有,这个就是shell脚本!

shell脚本类似windows的批处理文件,shell脚本就是将连续执行的命令写成一个文件。

shell脚本提供数组、循环、条件判断的等功能。shell脚本一般是Linux运维或者系统管理员要掌握的,作为嵌入式开发人员,只需要掌握shell脚本最基础的部分即可。

二十七、shell脚本写法

shell脚本是个纯文本文件,命令从上而下,一行一行的开始执行。shell脚本扩展名为.sh。

shell脚本第一行一定要为:

#!/bin/bash

表示使用bash。

二十八、shell脚本语法

1第一个shell脚本

2、交互式shell脚本

read。

3、shell脚本的数值计算

shell仅支持整形,数值计算使用$((表达式))。    =两边不能有空格

4、test命令

test命令用于查看文件是否存在、权限等信息,可以进行数值,字符,文件三方面的测试。

&&和||命令:

cmd1 && cmd2 当cmd1执行完并且正确,那么cmd2开始执行,如果cmd1执行完毕错误,那么cmd2不执行。

cmd1 || cmd2 当cmd1执行完毕并正确,那么cmd2不执行,反之cmd2执行。

5、中括号[]判断符

[ ] ==或 !=

6、默认变量

$0~$n,表示shell脚本的参数,包括shell脚本命令本身,shlle脚本命令本身为$0

$#:#表示最后一个参数的标号。

$@:表$1、$2、$3......

二十九、I.MX6ULL芯片简介

NXP出品的,528~900MHz的Cortex-A7内核的MPU。

三十、Cortex-A7架构

三十一、I.MX6U IO表示形式

STM32:管脚名字:PA0~15,PB0~15 PC、PD。。。

I.MX6ULL: 管脚名字:PAD_BOOT_MODE0,管脚的复用功能:

IOMUXC_SNVS_SW_MUX_CTL_PAD_BOOT_MODE0

IOMUXC_SNVS_SW_PAD_CTL_PAD_BOOT_MODE0

对于6ULL,查看管脚复用的步骤:

①、打开参考手册

②、找到32章,IO复用章节

③、查找对应的管脚。

三十二、汇编LED原理分析

为什么要学习Cortex-A汇编:

· ①、需要用汇编初始化一些SOC外设。

②、使用汇编初始化DDR,I.MX6U不需要。

③、设置sp指针,一般指向DDR,设置好C语言运行环境。

1、·ALPHA开发板LED灯硬件原理分析:

STM32 IO初始化流程:

①、使能GPIO时钟。

②、设置IO复用,将其复用为GPIO

③、配置GPIO的电气属性。

④、使用GPIO,输出高/低电平。

I.MX6ULL IO初始化:

①、使能时钟,CCGR0~CCGR6这7个寄存器控制着6ULL所有外设时钟的使能。为了简单,设置CCGR0~CCGR6这7个寄存器全部为0XFFFFFFFF,相当于使能所有外设时钟。

②、IO复用,将寄存器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03的bit3~0设置为0101=5,这样GPIO1_IO03就复用为GPIO。

③、寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03是设置GPIO1_IO03的电气属性。包括压摆率、速度、驱动能力、开漏、上下拉等。

④、配置GPIO功能,设置输入输出。设置GPIO1_DR寄存器bit3为1,也就是设置为输出模式。设置GPIO1_DR寄存器的bit3,为1表示输出高电平,为0表示输出低电平。

三十三、汇编简介

汇编由一条一条指令构成,指令就涉及到汇编指令。

Int a,b;

a=b;

假设a地址为0X20,b地址为0x30

LDR R0, =0X30

LDR R1, [R0]

LDR R0, =0X20

STR R1, [R0]

我们在使用汇编编写驱动的时候最常用的就是LDR和STR这两个指令。

三十四、编写驱动

三十五、编译程序

1、编译程序

①、使用arm-linux-gnueabihf-gcc将.c .s文件变为.o

②、将所有的.o文件连接为elf格式的可执行文件。

③、将elf文件转为bin文件。

④、将elf文件转为汇编,反汇编。

链接:

链接就是将所有.o文件链接在一起,并且链接到指定的地方。本实验链接的时候要指定链接起始地址。链接起始地址就是代码运行的起始地址。

对于6ULL来说,链接起始地址应该指向RAM地址。RAM分为内部RAM和外部RAM,也就是 DDR。6ULL内部RAM地址范围0X900000~0X91FFFF。也可以放到外部DDR中,对于I.MX6U-ALPHA开发板,512MB字节DDR版本的核心板,DDR范围就是0X80000000~0X9FFFFFFF。对于256MB的DDR来说,那就是0X80000000~0X8FFFFFFF。

本系列视频,裸机代码的链接起始地址为0X87800000。要使用DDR,那么必须要初始化DDR,对于I.MX来说bin文件不能直接运行,需要添加一个头部,这个头部信息包含了DDR的初始化参数,I.MX系列SOC内部boot rom会从SD卡,EMMC等外置存储中读取头部信息,然后初始化DDR,并且将bin文件拷贝到指定的地方。

Bin的运行地址一定要和链接起始地址一致。位置无关代码除外。

三十六、烧写bin文件

STM32烧写到内部FLASH。

6ULL支持SD卡、EMMC、NAND、nor、SPI flash等等启动。裸机例程选择烧写到SD卡里面。

在ubuntu下向SD卡烧写裸机bin文件。烧写不是将bin文件拷贝到SD卡中,而是将bin文件烧写到SD卡绝对地址上。而且对于I.MX而言,不能直接烧写bin文件,比如先在bin文件前面添加头部。完成这个工作,需要使用正点原子提供的imxdownload软件。

Imxdownload使用方法,确定要烧写的SD卡文件,我的是/dev/sdf。

给予imxdownload可执行权限:

Chmod 777 imxdownload

烧写:

./imxdownload led.bin /dev/sdf

Imxdownlaod会向led.bin添加一个头部,生成新的load.imx文件,这个load.imx文件就是最终烧写到SD卡里面去的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值