Linux实习培训总结
文章目录
- 一些理论知识
- 开发环境
- 系统:
- 硬件:
- Linux基础
- 基础操作
- 命令提示符
- 文件详情
- 基础命令
- Vim命令行编辑器
- vim基本操作
- vim工作模式
- C语言编译环境
- C语言编译过程
- 编译
- 执行
- 环境搭建包括两部分:主机和开发板
- 搭建主机开发环境
- 搭建开发板环境
- 搭建主机开发环境
- 搭建交叉开发环境
- 交叉编译工具
- 步骤
- 配置主机IP地址
- TFTP协议配置
- NFS配置
- 搭建开发板环境
- 调试工具
- 开发板配置
- 配置开发板IP地址
- 配置TFTP协议
- 配置NFS协议
- 驱动编写
- 驱动前准备
- 驱动编写
- 示例 hello.c
- 编写程序
- 进行编译
- 示例 蜂鸣器1
- 示例 蜂鸣器2
一些理论知识
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基础
基础操作
- 打开终端
ctrl + alt + t - 关闭终端
alt + f4 - 放大终端
ctrl + shift + ‘+’ - 缩小终端
ctrl + ‘-’ - 方向左键+上下键,切换历史命令
命令提示符
fs@ubuntu:~$
用户名@主机名:当前所在工作路径 权限标志
$: 表示当前用户是普通用户
#: 表示当前用户是管理员用户(root)
路径:
windows: 以盘符形式划分路径, 在不同盘符下挂载不同文件
Linux: 以根目录(’/’)为起点, 管理多个目录的树形结构
/:
etc: 存放系统配置文件
bin: 存放常用指令
dev: 存放设备文件
home: 普通用户的主目录, 所有普通用户的文件都创建在这个目录下(普通用户的工作路径)
root: root用户的主目录
家目录(~): 普通用户的工作路径
/home/fs
pwd: 显示当前所在工作路径
文件详情
基础命令
ls (list)
显示当前文件夹下的所有文件
ls -a:显示当前文件夹下的所有文件,包括隐藏文件(以’.'开头的文件)
ls . : 表示当前所在路径
ls … : 表示上一级所在路径
ls -l: 显示文件的详细信息cd (change directory)
切换工作路径
cd + 路径: 切换到相应的路径下
eg:
cd : 回家
cd /: 切换至根目录下
cd ~: 回家
cd 目录名: 切换到相应的目录下mkdir (make directory)
创建文件夹
mkdir + 目录名: 创建一个空目录
mkdir -p 子目录1/子目录2: 先创建子目录1, 再在子目录1下创建子目录2touch
创建文件,如果文件存在, 则修改文件时间戳为当前时间
touch 路径/文件名: 在指定路径下创建文件
eg:
touch ./day1/test1/1.txtcp
复制文件
cp 源文件 目标目录: 复制源文件到目标目录下
复制目录
cp -a 源目录 目标目录: 复制整个源目录至目标目录下mv(move)
移动文件
mv 源文件 目标目录: 将源文件移动到目标目录下, 源文件可以是多个文件
重命名文件
mv 源文件 目标文件: 当目标文件不存在时为重命名操作rm (remove)
删除文件
rm -rf 文件名: 直接删除指定路径下的文件
删库跑路: rm -rf /*×××su
切换用户
su + 用户名: 切换至相应用户, 并获得该用户的权限
eg: su root
su fs
修改密码: passwd root: 设置root用户密码sudo
sudo + 指令: 以管理员的身份执行指令
修改密码: sudo passwd root: 设置root用户密码
删库跑路: sudo rm -rf /*clear :清屏
Vim命令行编辑器
文本编辑器,开源免,可定制
vim基本操作
- 打开文件
vim + 文件名: 以vim打开一个文件 - 模式切换
一般模式 -> 插入模式: 按’a’,‘i’,‘o’,‘A’,‘I’,‘O’
插入模式 -> 一般模式: 按’Esc’
一般模式 -> 底行模式: 按 shift + ‘:’ 或 按空格键
底行模式 -> 一般模式: 按’Esc’
vim工作模式
一般模式
使用vim打开文件默认进入的模式, 文本的复制粘贴撤销剪切等
复制------yy
粘贴------p
剪切------dd
撤销------u
恢复------ctrl + r插入模式
文本编辑
a: append, i:insert o:open
a: 从光标的下一个位置进入插入模式
i: 从光标的位置进入插入模式
o: 从光标的下一行新建一行进入插入模式底行模式(在编辑器底行,用于以下操作)
可以执行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地址
- 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 - 重启网卡: sudo /etc/init.d/networking restart,出现OK即可
- 以管理员模式运行虚拟机,点击左上角编辑->虚拟网络编辑器->选择桥接模式->桥接有线网卡
(含Realtek GbE Family Controller的选项)
- 重启网卡: sudo /etc/init.d/networking restart
出现OK即可 - ifconfig查看IP地址
TFTP协议配置
将exynos4412-fs4412.dtb和uImage文件拷贝到虚拟机中
- cd /
- sudo mkdir tftpboot
- sudo mv ~/exynos4412-fs4412.dtb /tftpboot
- sudo mv ~/uImage /tftpboot
- sudo chmod 777 /tftpboot -R
- sudo vim /etc/default/tftpd-hpa
修改配置文件为:
TFTP_USERNAME=“tftp”
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS=“0.0.0.0:69”
TFTP_OPTIONS="-l -c -s" - 重启服务: sudo service tftpd-hpa restart
出现进程号为成功, 进程号随机显示
NFS配置
将rootfs.tar.xz拷贝到虚拟机中
- sudo mkdir /src
- sudo mv ~/rootfs.tar.xz /src
- cd /src
- sudo tar -xvf rootfs.tar.xz
- sudo chmod 777 /src -R
- sudo vim /etc/exports
在配置文件中添加:
/src/rootfs/ *(rw,sync,no_root_squash,no_subtree_check) - 重启服务: sudo /etc/init.d/nfs-kernel-server restart
出现四个ok即可
注:上述虚拟机环境搭建好后,每次重启虚拟机,都会重新连接网络,需要几分钟的时间。
搭建开发板环境
调试工具
SecureCRSecureFXPortable64
- 点击快速连接
- 选择协议: Serial
- 选择端口号(COM)
- 设置波特率: 115200
- 点击连接(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 #进行编译,不要忘
驱动编写
四个部分组成:
- 头文件
- 驱动模块装载和卸载函数的声l明
- 驱动模块装载和卸载函数的实现
- 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是自己创建的存放驱动的目录elseobj-m += hello.oendif
进行编译
虚拟机端
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 1int 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;
}
运行步骤同上
Linux实习培训总结相关推荐
- 武汉linux驱动培训转让,linux驱动培训靠谱吗
作为一名Linux爱好者,在Linux的世界中也算是半个老司机了,从桌面玩到服务器.从ubuntu到centos.从计算机到路由器,各种Linux的花俏玩法都略有体验.作者并非职业Linux选手,我仅 ...
- DYMO/Mimio推出最新互动教育软件linux操作系统培训
美国州剑桥市,2012年4月18日-DYMO/Mimio最创新的教育软件--具有革新的ActivityWizard创建工具及MimioStudio9.1互动软件在中国首次亮相.MimioStudioA ...
- linux环境搭建实践总结,linux实习心得体会
linux实习心得体会 linux实习心得体会1 学习Linux,应该怎样学,主要学些什么,一位Linux热心学习者,一段学习Linux的风云经验,历时十二个小时的思考总结,近十位网络Linux学习者 ...
- linux基础培训ppt,Linux 基础培训.ppt
<Linux 基础培训.ppt>由会员分享,可在线阅读,更多相关<Linux 基础培训.ppt(38页珍藏版)>请在人人文库网上搜索. 1.1,Linux 基础培训,Autho ...
- linux基础培训下载,huimaiLinux系统基础培训.ppt
huimaiLinux系统基础培训.ppt Linux基础培训,主讲人李振华,培训目地,一.Linux 认识 二.系统启动顺序 三.常用命令介绍,第一章,认识 Linux,Linux小常识,什么是Li ...
- linux kernel 培训,《Linux Kernel培训课件》.pdf
<Linux Kernel培训课件>.pdf Introduction to Linux Kernel Subsystems 中科信软高级技术培训中心- Objectives Unde ...
- 中软实习培训记录十(0730)
中软实习培训记录十(0730) 删除功能 删除功能实现 删除功能演示 用户的新闻浏览系统 界面设计 主页新闻列表实现 主页新闻列表显示 主页类别列表实现 主页类别列表显示 主页标签列表实现 主页标签列 ...
- 中软实习培训记录十一(0731)
中软实习培训记录十一(0731) 新闻详情页内的评论功能 实体类设计 评论展示部分 定义评论功能接口 定义Repository Controller处理 评论保存发布部分 定义评论功能接口 Contr ...
- 中软实习培训记录十二(0802)
中软实习培训记录十二(0802) 归档功能实现 归档功能演示 异常事件处理 演示 拦截器 介绍 构建拦截器 在上周我们已经完成了新闻的后台管理部分以及用户浏览界面的分类.标签和主页,今天来实现界面上的 ...
最新文章
- 网上支付、协议支付与快捷支付区别
- webview 修改html,使用自定义CSS在WebView中呈现HTML
- Mule web service调用中的复杂类型传递
- Git+SourceTree使用时出现的问题
- vue学习路线图,学习vue就是那么清晰。
- 中国企业500强完整榜单,请为自己和孩子收藏
- IIS搭配Server-u构建企业空间服务(二)
- 还在低效搬砖?看 BIM 如何颠覆了土木工程?
- 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。...
- Python+selenium自动化测试环境安装
- elf section类型_ELF 转二进制(2/4): 允许把 Binary 文件加载到任意位置
- 记一次js调试(attachEvent, onchange, onpropertychange)
- 考研408院校合集以及学科评估
- rust写操作系统 rCore tutorial 学习笔记:实验指导零 创建项目与启动
- osm数据导入mysql_利用OpenStreetMap(OSM)数据搭建一个地图服务
- 为什呢vue组件中的data必须是函数?
- php下载源文件绕开下载地址,Fengcms 最新版v1.24任意文件下载(绕过过滤)
- python 对数函数_使用Python玩转高等数学(4):对数函数
- 思杰桌面虚拟化---------- 为什么我们仍然坚持MCS
- 网页前端简单制作(超级课程表)
热门文章
- python keyshot_带你快速了解KeyShot 6中的新功能
- 在html中金色怎么写,HTML5 3款设计精美的暗金色文本输入框
- 【Effective Objective-C】—— 熟悉Objective-C
- mtb11_Dashboard(collapse, hide filters)_DATETRUNC_Donut_各种chart_Custom Shapes Size_action_layout
- Javascript数组去重方法
- 升级鸿蒙系统无法连接服务器,升级到鸿蒙系统后经常提示当前无网络,请检查后重试的说明...
- PADS中元件引脚类型的解释
- 【考研】英语作文 Part A 范文积累
- 今天看了许多关于高考的新闻的感想
- XShell和XFTP家庭免费版