LINUX移植、命令笔记

VI编辑器快捷操作、快捷键:

①删除一整行:dd 删除N行:dnd
②复制一整行:yy 粘贴:p
③快速打开终端: ctrl + alt + t
④光标快速定位到第N行: nG
⑤光标快速定位到第1行: gg


0.常用命令:
①echo $? : 查看上一条命令是否执行成功
②ln -s 真正的目标地址 要链接为的目标地址
③ VIM编辑器下,批量替换的命令: % s/将要被替换掉的字符/准备替换进去的字符/g
如果是替换成变量,这样: % s/将要被替换掉的字符/${准备替换进去的变量}/g
④查看当前目录下所有文件的大小: du -sh
⑤切换到root用户 su root
⑥创建快捷方式: echo 准备生成快捷方式的内容 >> 快捷方式名称 eg: echo vim uboot/config.h >> ed.01.sh (在当前目录下生成ed.01.sh这个快捷方式,打开这个快捷方式,相当于用vim打开了uboot/config.h这个文件)
对于一些路径非常复杂的目录,使用这种方式很好使
⑦给root用户设置密码: sudo passwd root

 

 

1.解压命令: tar -xzvf ****
打包命令: tar -vcjf ****

 

2.安装ftp服务器: sudo apt-get install vsftpd
配置ftp服务器: sudo vi /etc/vsftpd.conf ---> 确保以下两行没有被屏蔽: local_enable=YES write_enable=YES
重启ftp服务器: sudo /etc/init.d/vsftpd restart

 

3.windows下ftp工具:FileZilla。 (如果显示乱码,就在字符集选项中,强制UTF-8) 想使用这个工具,必须安装ftp服务器

 

4.安装NFS服务器: sudo apt-get install nfs-kernel-server rpcbind
配置NFS服务器: sudo vi /etc/exports ---> 在最后面添加 /home/zhangle/linux/nfs *(rw,sync,no_root_squash)
重启NFS服务器: sudo /etc/init.d/nfs-kernel-server restart

安装TFTP服务器: sudo apt-get install tftp-hpa tftpd-hpa(在/home/zhangle/linux/下创建tftpboot)
配置TFTP服务器: sudo vi /etc/xinetd.d/tftp ,如果没有/etc/xinetd.d 目录就自行创建,然后在里面输入如下内容:
server tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /home/zhangle/linux/tftpboot/
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
启动TFTP服务器:sudo service tftpd-hpa start
打开/etc/default/tftpd-hpa 文件,将其修改为如下所示内容:
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/zhangle/linux/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"
TFTP_DIRECTORY 就是上面创建的 tftp 文件夹目录,以后就将所有需要通过TFTP 传输的文件都放到这个文件夹里面,并且要给予这些文件777权限
重启TFTP服务器:sudo service tftpd-hpa restart

 

5.开启SSH服务: sudo apt-get install openssh-server

 

6.安装交叉编译器安装:
①将安装包复制到ubuntu下自定义的tool文件夹下(gcc-linaro-4.9.4)
②在/usr/local下创建arm文件夹,将步骤1中的交叉编译器拷贝到该文件夹下
③sudo tar -vxf gcc-linaro-4.9.4-***(交叉编译器的安装包)
④修改环境变量 sudo vi /etc/profile,在最末尾输入:export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm_linux_gnueabihf/bin
⑤查验安装成功与否:arm-linux-gnueabihf-gcc -v 末尾出现gcc版本号,代表安装成功
酷客开发板按照手册配置,需要注意的是:修改环境变量,要按照步骤4操作,文档中的不对。

 

7.无法获得锁 /var/lib/dpkg/lock-frontend - open 解决方案:
①sudo rm /var/lib/dpkg/lock-frontend
②apt-get install net-tools

 

8.无法获得锁 /var/cache/apt/archives/lock - open 解决方案:
①sudo rm /var/cache/apt/archives/lock
②sudo rm /var/lib/dpkg/lock

 

9.开发板讲解是emmc启动方式,拨码开关按照丝印标识,拨成emmc启动

 

10.安装deb包: sudo dpkg -i ***(deb包) (以安装vscode为例,安装好后,图标在/usr/share/applications里)

 

11.VS CODE需要额外安装的第三方包:
1)、C/C++,这个肯定是必须的。
2)、C/C++ Snippets,即 C/C++重用代码块。
3)、C/C++ Advanced Lint,即 C/C++静态检测 。
4)、Code Runner,即代码运行。
5)、Include AutoComplete,即自动头文件包含。
6)、Rainbow Brackets,彩虹花括号,有助于阅读代码。
7)、One Dark Pro,VSCode 的主题。
8)、GBKtoUTF8,将 GBK 转换为 UTF8。
9)、ARM,即支持 ARM 汇编语法高亮显示。
10)、Chinese(Simplified),即中文环境。
11)、vscode-icons,VSCode 图标插件,主要是资源管理器下各个文件夹的图标。
12)、compareit,比较插件,可以用于比较两个文件的差异。
13)、DeviceTree,设备树语法插件。
14)、TabNine,一款 AI 自动补全插件,强烈推荐,谁用谁知道!

 

12.对于IMX6ULL,查找管脚复用的步骤:
①打开参考手册;
②找到32章节管脚复用;
③查找对应管脚;

 

13.单片机有关的知识:
①对于一个管脚,有2个寄存器,其中MUX主要是配置其复用功能的,另外一个CTL是配置其电气特性的。
②GPIO1_GDIR寄存器某一位设置为1,其为输出模式;(即控制输入输出的)
③GPIO1_DR寄存器设置为1,输出高电平;(即输出高、低电平)

 

14.程序编译过程:
①将.c .s. .h文件生成.o文件 arm-linux-gnueabihf-gcc -g -c led.s -o led.o (其中-g:产生调试信息 -c:编译源文件但不连接)
②将所有的.o文件连接为.elf格式的可执行文件 arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf (其中:-Ttext为链接首地址 led.o为准备链接的文件,led.elf为链接后的文件)
链接就是将所有.o文件链接在一起,并且链接到指定的位置,对于6ULL,链接地址应该指向RAM地址。RAM分为内部RAM和外部RAM;
对于6ULL内部RAM地址范围:0X900000~0X91FFFF,
对于512MB字节DDR版本,RAM范围:0X80000000~0X9FFFFFFF
对于256MB字节DDR版本,RAM范围:0X80000000~0X8FFFFFFF
本视频链接地址:0X87800000(为了和uboot统一)
③将.elf文件转为.bin文件 arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin (其中 -O:指定什么格式输出,后面的binary为指定二进制输出 -S:不要复制源文件中的重定位信息和符号信息 -g:不复制源文件中的调试信息)
④将.elf文件转为汇编(反汇编) arm-linux-gnueabihf-objdump -D led.elf > led.dis (其中 -D表示反汇编所有的段) ----这个过程非必须,但是很有意义,方便分析代码

 

15.启动选择:
①IMX6ULL支持SD卡、EMMC、NAND FLASH、NOR FLASH、SPI FLASH启动

 

16.如何区分插上SD卡后,哪个盘符是刚插入的SD卡:
看哪个盘带有一个**1,即插入后,会多2个盘符,一个.sd,一个sd1。

 

17.烧写程序的方法:
①imxdownload拷贝到ubuntu下;
②chmod 777 imxdownload;
③./imxdownload led.bin /dev/sd (led.bin:二进制文件 /dev/sd:SD路径)

18.启动方式:
前提是设置MODE1和MODE0是从内部BOOT启动的。(MODE1=1,MODE0=0),支持SD、EMMC、NAND FLASH、NOR FLASH、SPI FLASH、EEPROM,我们最常用的就是NAND、SD、EMC、SPI FLASH
如何选择启动设备:通过BOOT_CFG选择:有

 

19 内部BOOT ROM启动时做的事情:
①设置内核时钟为396MHz;
②使能MMU和Cache,使能L1cache L2 cache MMU,目的就是为了加速启动
③从BOOT_CFG设置的外置存储中,读取image,然后做相应的处理

 

20.IVT和Boot Data数据:
Bin文件前面要添加头部。烧写到SD卡中的load.imx文件在SD卡中的起始地址是0x400,也就是1024。头部大小为3KB,加上偏移的1KB,一共是4KB,因此在SD卡中bin文件起始地址为4096。
IVT大小为32B/4=8条。

 

21.芯片应该工作在Supervisor(SVC)模式下,CPSR寄存器的bit4~0,应该为10011,即0x13;

 

22.几个汇编指令:
①MRS:将特殊寄存器的数据读取到通用寄存器里面;
②MSR:将通用寄存器的数据读取到特殊寄存器里面;
③BIC:位清除指令,BIC后面跟的位,全部清除
④ORR:或运算
⑤LDR:将存储器地址所指地址处连续的4个字节的数据传送到目的寄存器中
⑥b:跳转指令
⑦stmia:STMIA R0,{R1,R2,R3,R4} ;将R1-R4的数据存储到R0指向的地址上,R0的值不更新,IA传送后地址加4


23.C语言程序设置SP指针:
Sp可以指向内部RAM,也可以指向DDR,
开发板视频中,将其指向DDR。
Sp设置到哪里?512MB的范围0x80000000~0x9FFFFFFF。
栈大小,0x200000=2MB。
处理器栈增长方式,对于A7而言是向下增长的。设置sp指向0x80200000
使用b指令,跳转到C语言函数,即跳转到main函数

 

24.arm-linux-guneabihf -gcc -Wall -nostdlib -c -O2 -o $@ $<
其中:-Wall表示显示编译的时候产生的所有警告 -nostdlib表示不链接系统标准启动文件和库文件,否则编译可能会报错 -O2表示优化等级

 

25.通过结构体访问寄存器的方法:宏定义出寄存器的基地址,将寄存器详细的列表写成一个结构体,然后再通过宏定义将基地址和结构体绑定,具体如下例子:
#define CCM_BASE (0x020C4000)
typedef struct
{
volatile unsigned int CCR;
......
}CCM_Type;

#define CCM ((CCM_Type *) CCM_BASE) //这一行是核心,将基地址与凌驾于基地址之上的所有寄存器绑定在一起,使用起来非常方便

 

26.BSP工程管理:目的是为了模块化整理代码,同一个属性的文件存放在同一个目录里面
①bsp文件夹:存放驱动文件,在该目录下再分别建立子目录,delay、clk、led等。
②imx6u文件夹:和芯片相关的文件
③obj文件夹:临时生成的.o文件
④project文件夹:

 

27.设置头文件路径的方法:
先创建.vscode文件夹,然后按下ctrl+shift+p,搜索“>C/C++:Edit”,打开弹出的json文件。会自动在.vscode目录下生成一个叫做c_cpp_properties.json的文件,然后在c_cpp_properties.json文件中的路径中添加路径

 

28.uboot简介:
uboot就是一个逻辑程序,从作用上讲,就是一个bootloader,用于启动linux系统,其最主要的作用就是初始化DDR,因为LINUX是运行在DDR里面的。

 

29.SecureCRT设置最大显示行数:Terminal---Emulation---Scollback---Scollback buffer

 

30.带有调试性质的开发,uboot都是烧写到SD卡中的

 

31.UBOOT常用命令:
和内存有关:
①bdinfo:查看板子信息
②printenv:查看板子当前环境变量
③setenv/saveenv:设置、保存环境变量
④md:用于显示内存值
⑤nm命令:用于设置内存值
⑥mm命令:修改指定地址的内存值,修改之后地址会自增,方便连续修改
⑦mw命令:用于使用一个指定的数据填充一段内存
⑧cp命令:用于将DRAM中的数据从一段内存拷贝到另一段内存中。
⑨cmp命令:用于比较两段内存是否相等
和网络有关:
①ping命令:测试网络
有关设置网络的命令:
setenv ipaddr 192.168.1.50
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.250
②dhcp命令:自动获取IP
③nfs命令:目的是为了调试程序(得提前开启nfs服务器) eg: nfs 80800000 192.168.1.66:/home/zhangle/linux/nfs/zImage //将ubuntu下的zImage镜像下载到80800000地址里去
④tftp命令:加载/拷贝某文件到固定地址 eg: tftp 87800000 printf.bin
和MMC/SD有关:
①mmc info:打印当前选中设备的信息
②mmc scan:重新扫描mmc设备,但是不显示
③mmc list:列出所有mmc设备
④mmc dev 1:选中dev1为当前设备
⑤mmc part:列出当前mmc分区
⑥mmc read addr blk cnt: 从mmc设备的第blk块开始读取cnt个块到addr内存
和文件系统有关:
①fatinfo:查询指令MMC设置指定分区的文件系统信息 eg: fatinfo mmc 0:0 查看MMC第0个mmc的第0个分区
② fstype mmc cnt1:cnt2 :查询MMC设备某个分区的文件系统格式。 其中cnt1为第几个MMC,cnt2为第几个分区
③fatload mmc cnt1:cnt2 addr zImage:用于将指定的文件读取到DRAM中. 其中cnt1为第几个MMC,cnt2为第几个分区
④fatwite:将DRAM中的数据写入到MMC设备中
★BOOT操作指令:常用跟boot有关的命令有:bootz、bootm、boot
①bootz命令:
bootz 80800000 - 83000000 (镜像地址是80800000,设备树地址是83000000)
从mmc启动的方法: (读出来zImage、设备树、启动)
①fatload mmc 1:1 80800000 zImage
②fatload mmc 1:1 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb
③bootz 80800000 - 83000000
②bootm用于启动uImage,因为我们不用,所以暂时不学
③bootz命令:用于执行bootcmd(下一)整个命令的集合
从mmc启动的方法: (读出来zImage、设备树、启动)
①setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb;bootz 80800000 - 83000000;'
②saveenv
③boot
其他命令:
①reset:复位板子
②go:跳转到指定地址去
③run:运行环境变量中自定义的命令
④mtest:简单的内存读写测试命令

 

32.对于I.MX6U来说,SD/EMMC分为三个分区,第一个存放uboot,第二个存放Linux zImage,.dtb,FAT,第三个存放系统的根文件系统,EXT4;

 

33.编译过程中会拷贝mkimage、mkyaffs2到/bin目录下,其中mkimage是编译内核用的,mkyaffs2是打包文件系统用的

 

34.酷客开发板烧写步骤:
①拨码开关全部拨到左侧,进入烧写模式;
②安装驱动,驱动在开发资料-工具-WinUSB4NuVCOM_NUC970
③打开烧写器,烧写器在开发资料-工具-NuWriter-NuWriter
④烧录u-boot-spl.bin,Image Type选择uBoot,地址默认(0x200)
⑤烧录u-boot,Image Type选择Data,地址为0x100000
⑥烧录env,Image Type选择Environment,地址为0x80000
⑦烧录内核,Image Type选择Data,地址为0x200000
⑧烧录根文件系统,Image Type选择Data,地址为0x2000000(注意,比步骤七的地址多1个零)

 

35.ubuntu下的回收站目录是: ~/.local/share/Trash,删除进回收站的方式,其实都是mv指令

 

36.开发板方便远程操作,最好安装NFS、SSH、FTP,具体操作见手册第九章

 

上一篇:树莓派实现声控步进电机


下一篇:用C语言的LED实验,有汇编哦!