首页 > 其他分享 >20年本科实习总结

20年本科实习总结

时间:2022-10-05 23:14:33浏览次数:53  
标签:文件 gcc 20 sudo 开发板 本科 实习 vim hello

 最近一周,由于学校安排,进行了为期一周的华清远见的基础嵌入式培训,主要包含Linux基础操作和ARM环境搭建,虽然一周时间实际上上不了多少东西,但这算是我第一次正式使用Linux虚拟机进行嵌入式开发吧,最后成功响了蜂鸣器,也算是最备考期间一次难得的体验了。此篇文章为这段时间所所学内容的记述,便于自己以后复习。

在这里插入图片描述

目录

一些理论知识

1:Linux

 类Unix操作系统 , Linux是仿照unix来写,林纳斯·托瓦斯,开源免费,GNU开源组织。

 Unix:作者为肯·汤普森(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie),两人也是C语言的创始人,具体故事可以去搜一下,简单来说就是两人为了玩游戏,写出了C语言,又为了玩的更好,就自己编写了一套操作系统。

Linux:Linus Torvalds(林纳斯·托瓦兹)于1991年正式发布的一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。

GNU计划,有译为“革奴计划”,是由理查德·斯托曼在1983年9月27日公开发起的自由软件集体协作计划。它的目标是创建一套完全自由的操作系统GNU。自由软件基金会发展的重点。

2:Linux操作系统

Ubuntu:桌面应用为主,操作接近Windows

centos: 服务器

deepin: 深度linux操作系统

Redhat: 红帽linux

kali: 安全

3:vim命令行编辑器

文本编辑器

开源免费 可定制

4:C语言:

面向过程的编译型语言

编译型: 借助编译器, 将源码编译成二进制可执行文件(.exe)

解释型: 借助解释器, 将源码一条一条的翻译执行(python,php,shell,脚本语言)

开发环境

系统:

Ubuntu12
VMware
虚拟机: 可以模拟计算机的硬件环境(cpu,显卡,硬盘,内存等)

硬件:

Exynos 4412开发板
采用三星32nm HKMG工艺,是三星的第一款四核处理器。
在这里插入图片描述

Linux基础

基础操作

  1. 打开终端
    ctrl + alt + t
  2. 关闭终端
    alt + f4
  3. 放大终端
    ctrl + shift + '+'
  4. 缩小终端
    ctrl + '-'
  5. 方向左键+上下键,切换历史命令

命令提示符

fs@ubuntu:~$
用户名@主机名:当前所在工作路径 权限标志
$: 表示当前用户是普通用户

: 表示当前用户是管理员用户(root)

路径:
windows: 以盘符形式划分路径, 在不同盘符下挂载不同文件
Linux: 以根目录('/')为起点, 管理多个目录的树形结构

/:
etc: 存放系统配置文件
bin: 存放常用指令
dev: 存放设备文件
home: 普通用户的主目录, 所有普通用户的文件都创建在这个目录下(普通用户的工作路径)
root: root用户的主目录

家目录(~): 普通用户的工作路径
/home/fs

pwd: 显示当前所在工作路径

文件详情

基础命令

  1. ls (list)
    显示当前文件夹下的所有文件
    ls -a:显示当前文件夹下的所有文件,包括隐藏文件(以'.'开头的文件)
    ls .  : 表示当前所在路径
    ls .. : 表示上一级所在路径
    ls -l: 显示文件的详细信息

  2. cd (change directory)
    切换工作路径
    cd + 路径: 切换到相应的路径下
    eg:
    cd : 回家
    cd /: 切换至根目录下
    cd ~: 回家
    cd 目录名: 切换到相应的目录下

  3. mkdir (make directory)
    创建文件夹
    mkdir + 目录名: 创建一个空目录
    mkdir -p 子目录1/子目录2: 先创建子目录1, 再在子目录1下创建子目录2

  4. touch
    创建文件,如果文件存在, 则修改文件时间戳为当前时间
    touch 路径/文件名: 在指定路径下创建文件
    eg:
    touch ./day1/test1/1.txt

  5. cp
    复制文件
    cp 源文件 目标目录: 复制源文件到目标目录下
    复制目录
    cp -a 源目录 目标目录: 复制整个源目录至目标目录下

  6. mv(move)
    移动文件
    mv 源文件 目标目录: 将源文件移动到目标目录下, 源文件可以是多个文件
    重命名文件
    mv 源文件 目标文件: 当目标文件不存在时为重命名操作

  7. rm (remove)
    删除文件
    rm -rf 文件名: 直接删除指定路径下的文件
    删库跑路: rm -rf /*

  8. ×××su
    切换用户
    su + 用户名: 切换至相应用户, 并获得该用户的权限
    eg: su root
    su fs
    修改密码: passwd root: 设置root用户密码

  9. sudo
    sudo + 指令: 以管理员的身份执行指令
    修改密码: sudo passwd root: 设置root用户密码
    删库跑路: sudo rm -rf /*

  10. clear :清屏

Vim命令行编辑器

文本编辑器,开源免,可定制

vim基本操作

  1. 打开文件
    vim + 文件名: 以vim打开一个文件
  2. 模式切换
    一般模式 -> 插入模式: 按'a','i','o','A','I','O'
    插入模式 -> 一般模式: 按'Esc'
    一般模式 -> 底行模式: 按 shift + ':' 或 按空格键
    底行模式 -> 一般模式: 按'Esc'

vim工作模式

  1. 一般模式
    使用vim打开文件默认进入的模式, 文本的复制粘贴撤销剪切等
    复制------yy
    粘贴------p
    剪切------dd
    撤销------u
    恢复------ctrl + r

  2. 插入模式
    文本编辑
    a: append, i:insert o:open
    a: 从光标的下一个位置进入插入模式
    i: 从光标的位置进入插入模式
    o: 从光标的下一行新建一行进入插入模式

  3. 底行模式(在编辑器底行,用于以下操作)
    可以执行vim的指令, 文本的保存退出等
    保存-------w
    退出-------q
    保存并退出-wq
    强制保存---w!
    强制保存并退出-wq!

C语言编译环境

GCC编译器

C语言编译过程

预处理, 处理所有以#号开头的文件, #include,#define等
gcc -E hello.c -o hello.i
编译, 将预处理之后的文件翻译成汇编文件
gcc -S hello.i -o hello.s
汇编, 将汇编文件翻译成二进制文件
gcc -c hello.s -o hello.o
链接, 将二进制的目标文件和二进制的库文件链接生成可执行文件
gcc hello.o -o hello

编译

gcc 源文件.c -o 可执行文件名
gcc hello.c -o hello
gcc 源文件.c
gcc hello.c 默认生成可执行文件名为a.out

执行

./可执行文件名
如:
./hello
如图,打印hello,word!
在这里插入图片描述

环境搭建包括两部分:主机和开发板

搭建主机开发环境

网络 设置静态IP地址
TFTP: 简单文本传输协议 FTP简版
NFS: 网络文件系统 ,共享目录

搭建开发板环境

配置u-boot 2013
网络 设置静态IP地址
TFTP: 简单文本传输协议 FTP简版
NFS: 网络文件系统 ,共享目录

搭建主机开发环境

搭建交叉开发环境

交叉编译工具

pc :x86
target: arm
安装: 手动安装
芯片厂商提供
arm-none-linux-gnueabi-gcc hello.c -o hello
arm: 编译器编译出来的体系结构
none: 厂商名, 开源
linux: 针对linux操作系统
eabi: 嵌入式的标准接口, oabi

步骤

将gcc-4.6.4.tar.xz拷贝到虚拟机中(Ctrl+cv),解压至特定目录,添加环境变量,并检验。
cd ~
mkdir toolchain(创建工具环境)
mv gcc-4.6.4.tar.xz toolchain
cd toolchain
tar -xvf gcc-4.6.4.tar.xz
sudo vim /etc/bash.bashrc
 在文件最后一行添加:
 export PATH=$PATH:/home/fs/toolchain/gcc-4.6.4/bin/
source /etc/bash.bashrc
arm-n按下Tab键自动补全后,输入gcc -v出现版本为4.6.4为成功
在这里插入图片描述
在这里插入图片描述

配置主机IP地址

  1. sudo vim /etc/network/interfaces
    在配置文件中添加:
    auto eth0
    iface eth0 inet static
    address 192.168.1.66
    netmask 255.255.255.0
    gateway 192.168.1.0
  2. 重启网卡: sudo /etc/init.d/networking restart,出现OK即可
    在这里插入图片描述
  3. 以管理员模式运行虚拟机,点击左上角编辑->虚拟网络编辑器->选择桥接模式->桥接有线网卡
    (含Realtek GbE Family Controller的选项)
    在这里插入图片描述
  4. 重启网卡: sudo /etc/init.d/networking restart
    出现OK即可
  5. ifconfig查看IP地址
    在这里插入图片描述

TFTP协议配置

将exynos4412-fs4412.dtb和uImage文件拷贝到虚拟机中

  1. cd /
  2. sudo mkdir tftpboot
  3. sudo mv ~/exynos4412-fs4412.dtb /tftpboot
  4. sudo mv ~/uImage /tftpboot
  5. sudo chmod 777 /tftpboot -R
  6. sudo vim /etc/default/tftpd-hpa
    修改配置文件为:
    TFTP_USERNAME="tftp"
    TFTP_DIRECTORY="/tftpboot"
    TFTP_ADDRESS="0.0.0.0:69"
    TFTP_OPTIONS="-l -c -s"
  7. 重启服务: sudo service tftpd-hpa restart
    出现进程号为成功, 进程号随机显示
    在这里插入图片描述

NFS配置

将rootfs.tar.xz拷贝到虚拟机中

  1. sudo mkdir /src
  2. sudo mv ~/rootfs.tar.xz /src
  3. cd /src
  4. sudo tar -xvf rootfs.tar.xz
  5. sudo chmod 777 /src -R
  6. sudo vim /etc/exports
    在配置文件中添加:
    /src/rootfs/ *(rw,sync,no_root_squash,no_subtree_check)
  7. 重启服务: sudo /etc/init.d/nfs-kernel-server restart
    出现四个ok即可
    在这里插入图片描述
    注:上述虚拟机环境搭建好后,每次重启虚拟机,都会重新连接网络,需要几分钟的时间。

搭建开发板环境

调试工具

SecureCRSecureFXPortable64

  1. 点击快速连接
  2. 选择协议: Serial
  3. 选择端口号(COM)
  4. 设置波特率: 115200
  5. 点击连接(RTS/CTS选项要去掉)

在这里插入图片描述

开发板配置

开发板上电, 在倒计时结束之前按下回车键, 进入到u-boot配置界面
print: 查看环境变量
setenv: 设置环境变量
saveenv: 保存环境变量

配置开发板IP地址

setenv serverip 192.168.1.66 #虚拟机的IP地址
setenv netmask 255.255.255.0
setenv gatewayip 192.168.1.1
setenv ipaddr 192.168.1.88 #开发板IP地址
saveenv #保存
ping 192.168.1.66: 出现is alive表示配置成功 

可以print看一下设置项

配置TFTP协议

setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000
saveenv

配置NFS协议

setenv bootargs root=/dev/nfs nfsroot=192.168.1.66:/src/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.1.88
saveenv

在这里插入图片描述

若上述开发板配置均完成,则会出现以上情况,此时虚拟机和开发板共享目录/src/rootfs,并可以进行操作。

驱动编写

驱动前准备

将linux-3.14-fs4412.tar.xz拷贝到虚拟机中

tar -xvf linux-3.14-fs4412.tar.xz
cd linux-3.14-fs4412
make uImage -j2 #进行编译,不要忘

驱动编写

四个部分组成:

  1. 头文件
  2. 驱动模块装载和卸载函数的声l明
  3. 驱动模块装载和卸载函数的实现
  4. GPL声明

驱动加载: insmod hello.ko
驱动卸载: rmmod hello
查看代码: dmesg

示例 hello.c

编写程序

编写以下两个文件,并保证在同一目录。
hello.c

#include <linux/init.h>
#include <linux/module.h>

static int hello_init(void)
{
        printk("-----%s----\n",__FUNCTION__ );
            return 0;
}

static void helli_exit(void)
{
        printk("-----%s----\n",__FUNCTION__ );
}
module_init(hello_init);
module_exit(helli_exit);

MODULE_LICENSE("GPL");

Makefile

ifeq ($(KERNELRELEASE), )

KDIR = /home/fs/motor/linux-3.14-fs4412 #编译器所在目录
PWD = $(shell pwd)
all:
		make -C $(KDIR) M=$(PWD) modules
clean:
		make -C $(KDIR) M=$(PWD) clean
install:
		cp -rf *.ko /src/rootfs/test/ 
		#此处为和开发板共同的/src/rootfs目录下,/test是自己创建的存放驱动的目录

else

obj-m += hello.o

endif

进行编译

虚拟机端

make all
sudo make install

在这里插入图片描述
开发板端

cd test
insmod hello.ko #安装驱动,每次重启开发板都需要
./hello #运行

(无运行结果图)

示例 蜂鸣器1

将CD和pwm.ko移动至共享目录下/src/rootfs/test中
开发板端

chmod 777 CD #给予权限
insmod pwm.ko #安装驱动
./CD #运行程序

示例 蜂鸣器2

蜂鸣器程序,驱动依然为pwm.ko

#include <stdio.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

#define MAGIC_NUM 'k'

#define BEEP_ON _IO(MAGIC_NUM,0)
#define BEEP_OFF _IO(MAGIC_NUM,1)
#define BEEP_SETFRE _IO(MAGIC_NUM,2)

int int main(int argc, char const *argv[])
{
	int len;
	#5 3 5 3 5 3 1 2 4 3 2 5 5 3 5 3 1 2 4 3 2 1
	int pitch_frame[] = {784,659,783,659,784,659,523,622,698,659,
			622,783,783,659,783,659,523,587,698,659,622,523} ;‘
	
	int i;
	int fd = open("/dev/pwm",O_RDWR);
	len= sizeof(pitch_frame)/sizeof(pitch_frame[0]);
	if(-1 == fd)
	{
		perror("open()");
		exit(1);
	}
	if(i=0;i<len;i++)
	{
		ioctl(fd,BEEP_SETFRE,pitch_frame[i]);
		ioctl(fd,BEEP_ON);
		usleep(100000000);
		ioctl(fd,BEEP_OFF);
	}
	close(fd);
	return 0;
}

运行步骤同上

标签:文件,gcc,20,sudo,开发板,本科,实习,vim,hello
From: https://www.cnblogs.com/cloudraysun/p/16756704.html

相关文章

  • 2022-10-05-向哥哥汇报学习内容
    1.界面显示与逻辑处理1.1activity_main.xml<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"......
  • P4303 [AHOI2006]基因匹配
    初始方程为:\[f_{i,j}=\max(f_{i-1,j-1}+1,f_{i-1,j},f_{i,j-1})\]对于每一个\(i\)来说,只有五次由\(f_{i-1,j-1}\)来转移(组成DNA序列的每一种碱基在该序列中正好出......
  • 海康威视无法添加到萤石云问题-20221005
    问题描述:型号:DS-2CD2245XM-LGLSET添加到海康互联没问题,但是直接添加到萤石云会提示添加失败(102037)解决方法:在萤石云接入时选择设备令牌二维码,如下图设备令牌中......
  • BUPT 2022 Autumn Training #5
    题目链接:https://vjudge.net/contest/519146B-BestRelayTeam水题。D-DistinctiveCharacter题意给n(n<=100000)个长为k(k<=20)的01串,定义两个01串的相似度为相......
  • 吉他星云的20多年的演化
    吉他星云的20多年的演化arXiv:2210.01228 [pdf, other]AQuarterCenturyofGuitarNebula/FilamentEvolutionMartijndeVries, RogerW.Romani, OlegKargaltsev,......
  • 2022_10_5
    ......
  • 2022年了,你还不会手撕轮播图?
    前言手撕轮播图可能是很多前端初学者的噩梦,很多公司为了考察考生的基础知识掌握情况,通常会出一道手撕轮播图的题。虽然很多人看不起这道面试题,但是却很多人都无法写出正确......
  • 20221005
    20221005简单点题目背景今天有个巨佬不讲题德,出了个题,说他是乱出的水题。他出的可不是水题啊,Trie树,后缀树,AC自动机,训练有素;后来听说他打了三年NOI,看来是,有备而来。题......
  • P1823 [COI2007] Patrik 音乐会的等待
    用单调队列维护即可,注意要考虑高度相同的情况(可以记录单调队列中相同的个数)。时间复杂度为\(O(n)\)。#include<bits/stdc++.h>usingnamespacestd;#defineintlong......
  • A Unified Generative Framework for Aspect-Based Sentiment Analysis 基于方面的情
    摘要基于方面的情感分析(ABSA)旨在识别方面术语、相应的情感极性和观点术语。ABSA中有七个子任务。大多数研究只关注这些子任务的子集,这导致了各种复杂的ABSA模型,但很难在统......