首先要做的工作
1、完善交叉编译环境
source /etc/profile
arm-linux-gcc -v
2、启动nfs服务
service nfs start
3、关闭防火墙
service iptables stop
4、关闭linux的安全机制
setenforce 0
上述4个步骤做完后,一旦启动开发板,自动把虚拟机/etc/exports文件中导出的/root/test目录
挂载到开发板上的/test目录
开机实现挂载?
修改/etc/fstab表实现挂载。
步骤:
1、把开发板的ip固定下来,在开发板上修改/etc/net.conf
IPADDR=192.168.0.156
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
MAC=10:23:45:67:89:ab
2、修改开发板的/etc/fstab文件,加上一行
192.168.0.155:/root/test /test nfs defaults,nolock
3、修改linux内核启动时执行的文件/etc/init.d/rcS
sleep 10
mount -a
很重要的最后一步:把 板子上的 test 权限
chmod 777 /test
linux 内核 : cd /root/opt/Em
镜像文件在内核的 cdarch/arm/boot
4、开机自动挂载,在开发板上访问/test,即可看到虚拟机/root/test中的内容
#include <linux/init.h>
#include <linux/module.h>
static int __init hello_init(void)
{
return 0;
}
static void __exit hello_exit(void)
{
}
module_init(hello_init);
module_exit(hello_exit);
Makefile内容
第一种
KERNALDIR=/root/opt/EmbedSky/linux-2.6.30.4
obj-m :=hello.o
all:
make-C $(KERNALDIR) M=`pwd` modules
第二种
KERNALDIR=/root/opt/EmbedSky/linux-2.6.30.4
MODULENAME=firstchardriver
all:
make-C $(KERNALDIR) M=`pwd` modules
arm-linux-gcc-o test_$(MODULENAME) test_$(MODULENAME).c
clean:
make-C $(KERNALDIR) M=`pwd` clean
多个文件的处理(修改obj -m):
obj-m=exportimport.o
exportimport-objs:=export.o import.o
嵌入式系统:以应用为目的,以计算机技术为基础、软硬件可裁剪、应用种对功能、可靠性、成本、提及、功耗有特殊要求的专用计算机设备。
----------------------------------
linux操作系统命令:
1、软件的安装方式
1)rpm包安装
rpm -ivh xxx.rpm
-e
--replacepkgs 覆盖安装
--excludedocs 不安装帮助文档
--nodeps 不考虑依赖关系
--prefix 目录 指定安装目录
--replacefiles 替换文件安装
--force 强制安装
--test 只检测,不安装
查询软件是否安装
rpm -q 软件名称
rpm -qa|grep 软件名称
2)源代码安装
下载到的是一个tarball
解压缩
tar[-z|-j][xvf] xxx.tar.gz[bz2]
查看目录中README文件
./configure
make
make insatall
3)脚本安装
解压缩
tar[-z|-j][xvf] xxx.tar.gz[bz2]
查看目录中README文件
执行安装脚本 ./setup.sh
如果计算机联网,可以使用
yum install 软件名称
自动帮你查找最新版本,自动查找依赖的软件进行安装
yum update 软件名称
挂载:
1、挂载u盘
fdisk -l 查看目前分区
mount /dev/sdb /myupan
2、挂载iso镜像
mount -t iso9660 xxx.iso /mycd -o loop
cpio命令:
-i 将数据从文件或者设备中复制到系统
-o 将数据从系统中输出到文件或设备上
-v 显示文件名
-d 在需要的地方创建目录
实例:将/etc/inittab文件从安装包中
rpm2cpio xxx.rpm|cpio -ivd ./etc/inittab
用户和用户组:
添加用户:useradd 用户名 /etc/passwd
修改密码:passwd 用户名 /etc/shadow
删除用户:userdel 用户名
添加组:groupadd 组名 /etc/group
修改密码:gpasswd 组名 /etc/gshadow
删除组:groupdel 组名
把用户添加到组中:
gpasswd -a 用户名 组名
gpasswd -d 用户名 组名
gpasswd -A 用户名 组名
gpasswd -M 用户名 组名
chgrp 修改目录或者文件的所属组
chown 修改目录或者文件的所属者
chmod 修改目录或者文件的权限
1)chmod u|g|o [+|-|=] rwx 文件或目录名
2)chmod 三位8进制数 文件名或者目录名
网络相关命令:
查看ip地址 ifconfig
设置ip地址 ifconfig eth0 newip
查看网络是否通畅 ping ip
向某个在线用户发送信息 write
向所有的在线用户发送信息 wall
帮助:
1、文件名 --help
2、man 文件名
3、info 文件名
三个特殊的属性:
1、set uid:针对文件,设置后用户属性权限部分显示成s,执行该命令的用户临时具备命令所属者的权限
chmod u+s xxx 或者 chmod 4xxx xxx
典型案例: passwd 命令
2、set gid:针对文件,设置后用户所属组权限部分显示成s,执行该命令用户临时具备所属组的权限
chmod g+s xxx 或者 chmod 2xxx xxx
典型的案例: locate执行时可以访问
/var/lib/mlocate/mlocate.db
3、sticky bit:针对目录有效,设置生效后其他用户执行权限位显示t,特点是所有用户可以在该目录中创建修改文件,但是其他用户只能看,不能修改和删除他人的文件
chmod o+t xxx 或者 chmod 1xxx xxx
典型案例:/tmp 目录
一、vi编辑
插入状态:
i光标前 I 行首
a 光标后 A 行末
o所在行下一行 O 所在行上一行
ese退出插入状态
:set nu
:q 退出
:w 保存
:wq!强制保存退出
:!linux命令
:r 文件名
:r !linux命令 ---把命令的执行结果合并
:set ic
定位:
H屏幕顶端 M中部 L底部
移动光标 h左 j下 k上 l右
定位行首 0 行末 $
首行 gg
末行 G
定位到n行 :n 或者 nG
定位到m列 m空格
修改替换:
单个字符替换 r
多个字符替换 R
撤销上一步工作 u
查找:
/字符串 从上向下
?字符串 自下而上 n 查找下一个
查找替换:
:%s/old/new/g
:n1,n2s/old/new/g
剪切删除:
dd
ndd 当前行开始的多行
x 删除当前字符
nx 删除从当前字符开始的多个字符
:n1,n2d 删除指定范围的多行
复制:
yy 复制
nyy 复制n行
粘贴:
p 当前行的下一行
P 当前行的上一行
快捷键:
格式 :map 快捷键 具体的命令
:unmap 快捷键
:map ^p I#<esc> ---^ 通过ctrl+v
批量行的注释
:n1,n2s/^/#/g ---配置类文件shell文件注释
:n1,n2s/^#//g ---取消注释
:n1,n2s/^/\/\//g ---c语言编程多行注释
打开文件时直接定位到第n行
vi 文件名 +n
二、gcc编译工具
-o 指定编译得到的可执行文件名
-I 指定头文件所在位置
-WALL 显示所有的警告信息
-E 对应输出.i文件
-S 对应输出.s文件
-c 对应输出.o文件
-g 调试信息
-l 指定库文件名(可以缩写)
-L 指定库文件所在位置
三、gdb调试工具
gdb 编译后的可执行文件(加入了g调试信息)
gdb启动后,通过如下命令
file 文件名
list 显示程序代码
break n 第n行设置断点
run 运行程序
next 单步执行,不进入函数内部
step 单步执行,进入函数内部
quit 退出
info break 查看断点信息
delete n 删除某个断点(n是断点号)
disable n
enable n
print 变量 ---查看变量的值
break n if 条件 --条件成立时在第n行断点生效
四、make工具
相关管理的工具,必须和makefile文件配合
makefile文件格式:
目标:依赖文件1 依赖文件2...
<tab>gcc -o 欲得到的可执行文件名。。。
虚目标:
<tab>删除文件命令
应用于多个c源程序编译,适用make工具
执行make命令时,找到makefile第一个目标,按照该目标规则执行对应的命令
make -f 编译规则文件
五、shell编程
#!/bin/bash ---可以省略
执行shell脚步
1、修改权限,加上可执行的权限,执行时注意路径./xxx.sh
2、执行时采用命令 bash xxx.sh
read -p "xxxxxx" 变量名
第2章 嵌入式Linux驱动开发环境搭建
1、交叉编译环境:开发板资源少,无法满足对驱动程序的编辑、编译、调试过程;将该部分的工作放在虚拟机linux下来完成,将编译好得到的可执行的驱动模块下载到开发板上运行。交叉编译环境可以使得在虚拟机linux下编译得到的可执行模块在开发板中被识别。
2、嵌入式开发串口终端(超级终端,minicom,secureCRT):使用终端查看开发板的运行过程,验证驱动是否正确。
3、三台机器间的通讯。(windows---虚拟机linux---开发板):samba:完成windows---虚拟机linux通讯(虚拟机工具,SSH协议支持的工具)
nfs网络文件系统:完成虚拟机linux和开发板通讯
=====================================================
1、交叉编译环境
步骤:
(1)下载压缩包 EABI....tar.bz2
(2)解压 tar -jxvf EABI...
(3)找到所用命令所在的路径
/root/opt/EmbedSky/4.3.3/bin/
(4)修改/etc/profile文件,最后位置添加代码
export PATH=$PATH :(3)中的路径
(5)执行 source /etc/profile 使得修改立即生效
(6)执行命令 arm-linux-gcc -v 显示版本号
2、嵌入式开发串口终端
(1)超级终端:windows
开始 |程序|附近|通讯|超级终端
步骤:
a、输入一个新建链接的名称,任意
b、选择对应的串口(例如com1,根据硬件设备管理器中选择)
c、设置参数:
波特率 115200
数据流控制 无
(2)secureCRT:windows
新建会话,选择串口协议,设置波特率,取消数据流控制
(3)minicom:运行在虚拟机linux下
步骤:
a、查看是否安装minicom
rpm -q 软件名称
rpm -qa|grep 软件名称
b、挂载Centos的镜像文件,在挂载目录中查找
find /mycd -name ‘minicom*’
c、安装minicom
rpm-ivh /mycd/CentOS/minicom....
注意:可能会依赖关系,需要安装ncurses软件(该软件是需要进行源代码安装)
d、启动minicom
minicom直接启动,然后按 ctrl+a z 进入帮助,按o设置
minicom -s 进入设置
选择 serial portsetup,设置波特率,全部设置为no
选择 save setup asdfl
保存后重新启动,如果遇到错误提示,如下进行操作:
d.1查看是否有minicom仍然在运行,使用kill强制杀死
d.2识别的串口到底是否为/dev/ttyS0
3、
windows和虚拟机linux通讯方法
(1)使用虚拟机工具,共享目录
windows下的共享目录(c:/centos)在linux中对应
/mnt/hgfs/centos,复制该文件到linux系统中即可
(2)ssh 文件传输软件,设置虚拟机linux的ip和windows的ip在同一网段,启动软件后输入linux的ip,登录访问
(3)samba软件的安装
安装步骤:
a、查询是否安装 rpm -q 软件名称
b、find /mycd -name 'samba*'
c、安装
rpm -ivh samba-common....
rpm -ivh samba-client...
rpm -ivh samba-3....
注意:依赖关系
rpm -ivh perl-Conver....rpm
d、启动samba服务
service smb start|stop|status|restart
/etc/rc.d/init.d/smb start|stop|status|restart
e、添加samba用户(该用户是一个已经存在的linux用户)
smbpasswd -a linux用户
f、开放共享目录
mkdir /smbtest
chmod 777 /smbtest
g、修改配置文件,使得f中创建的目录对windows可见
/etc/samba/smb.conf文件进行修改
[smbtest]
path=/smbtest
browseable=yes
writable=yes
guestok=yes
h、重新启动服务
i、关闭linux的防火墙
iptables -F
j、因为linux有一个安全机制 SELINUX
setenforce 0 关闭安全机制
windows端执行访问
开始|运行中输入linux 的ip
\\192.168.0.155
输入用户名和密码访问
samba服务:实现windows和linux之间通讯
1、rpm -q samba
2、mount -t iso9660Centos.xxx..iso /mycd -o loop
3、find /mycd -name'samba*'
4、rpm -ivhsamba-common...rpm
rpm -ivh samba-client....rpm
rpm -ivh samba-3.4.....rpm
可能依赖关系 rpm -ivh perl-Conver....rpm
5、mkdir /smbtest
chmod 777 /smbtest
6、配置/etc/samba/smb.conf
[smbtest]
path=/smbtest
browseable=yes
writable=yes
guest ok=yes
7、添加一个samba用户(必须是一个已经存在的linux用户)
useradd zs ----添加linux用户
smbpasswd -a zs ----添加samba用户
8、启动samba服务 ----不启动,根本无法访问ip
service smb start
9、关闭linux的防火墙
iptables -f
service iptables stop ---关闭防火墙
10、关闭linux的安全机制 ---权限不足,打不开文件夹
setenforce 0
windows端访问
\\192.168.0.155
输入用户名和密码----samba用户
-------------------------------------------------------------
nfs 网络文件系统 虚拟机linux和开发板之间通讯
步骤:
1、 rpm -q nfs-utils
rpm -qa nfs-utils
2、find /mycd -name'nfs*'
3、rpm -ivhnfs-utils-lib....rpm
rpm -ivh nfs-1....rpm
4、可能存在依赖关系 ncurses软件,源代码安装
解压
./configure
make
make install
5、创建目录,开放权限
mkdir /nfstest
chmod 777 /nfstest
6、修改配置文件 /etc/exports
/nfstest *(rw,no_root_squash)
一般格式:
导出目录 客户端主机地址(权限,.....)
地址:
* 所有客户端主机地址
192.168.0.156 具体的ip地址
192.168.0.1/15 表示地址范围,15台机器均可访问
*.test.com 指定域
权限:
rw 可读可写
ro 只读
no_root_squash 不做匿名映射
7、使添加的导出目录立即生效
exportfs -ra ----该命令使得/etc/exports修改立即生效
exportfs -v -----显示所有的导出目录
8、启动nfs服务
service nfs start
9、关闭防火墙
service iptables stop
在开发板部分做的工作:
1、确保开发板和虚拟机linux的ip在同一网段
2、在开发板上创建一个目录 /test
3、在开发板上执行挂载命令
mount 192.168.0.155:/nfstest /test -o nolock
4、可以进行通讯共享
nfs服务:
1、导出目录(存在目录,且权限开放)
mkdir /nfstest
chmod 777 /nfstest
2、修改/etc/exports文件进行导出
/nfstest *(rw,no_root_quash)
3、使该文件生效
exportfs -ra
可以使用exportfs -v 查看是否生效
4、启动nfs服务
service nfs start 或者 /etc/rc.d/init.d/nfs start
5、关闭防火墙
service iptables stop
6、关闭linux的安全机制
setenforce 0
在开发板上
1、确认开发板的ip地址和虚拟机linux在同一网段,可以ping通
2、挂载操作
mount 虚拟机ip地址:/nfstest /test -o nolock
在使用时出现问题考虑:
1、网络是否通畅
2、nfs是否启动
3、防火墙是否关闭
----------------------------------