Linux驱动笔记

首先要做的工作

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、防火墙是否关闭

----------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值