zoukankan      html  css  js  c++  java
  • 设备文件BSP及嵌入式驱动开发笔记

    PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!

        BSP及嵌入式驱动开辟笔记

        第一讲嵌入式系统基本概念

        以应用为中央,以计算机技术为基础,其软硬件可配置,对功能、可靠性、本钱、体积、功耗有严厉约束的一种专用系统,所用的计算机称为嵌入式计算机。

        Linux目录文件

        /bin :显而易见,bin 就是二进制(binary)英文缩写。

        /boot :在这个目录下存放的都是系统启动时要用到的程序。在使用grub或lilo引诱linux的时候,会用到这里的一些信息。

        /dev:dev 是设备(device)的英文缩写。这个目录对所有的用户都十分主要。因为在这个目录中包括了所有linux系统中使用的外部设备。但是这里并非放的外部设备的驱动程序。

        /etc :etc这个目录是linux系统中最主要的目录之一。在这个目录下存放了系统管理时要用到的各种配置文件和子目录。我们要用到的网络配置文件,文件系统,x系统配置文件,设备配置信息,设置用户信息等都在这个目录下。  

        /sbin :这个目录是用来存放系统管理员的系统管理程序。

        /home :如果建立一个用户,用户名是“jl”,那么在/home目录下就有一个对应的/home/jl路径,用来存放用户的主目录。

        /lib :lib是库(library)英文缩写。这个目录是用来存放系统动态连接共享库的。几乎所有的应用程序都会用到这个目录下的共享库。

        /mnt :这个目录在一般情况下也是空的。可以临时将别的文件系统挂在这个目录下。

        /proc :可以在这个目录下获取系统信息。这些信息是在内存中,由系统自己发生的。

        /root :如果用户是以超级用户的身份登录的,这个就是超级用户的主目录。

        /tmp :用来存放不同程序执行时发生的临时文件。

        /usr :这是linux系统中占用硬盘空间最大的目录。

        Linux命令

        1、ls、mkdir、rmdir、date、who 相对路径和绝对路径

        2、文件解压命令

             gzip *.jpg压缩         gzip –d *.gz解压

        打包命令

        .gz

        解压1:gunzip FileName.gz

        解压2:gzip -dFileName.gz

        压缩:gzip FileName

        打包

        .tar.gz 和 .tgz

        解压:tar zxvfFileName.tar.gz ./DirName

        压缩:tar zcvfFileName.tar.gz DirName

        .tar.bz2

        解压:tar xjf FileName.tar.bz2 ./DirName

        压缩:tar cjf FileName.tar.bz2 DirName

        fdisk –l查看磁盘设备信息       fdisk –l /dev/sdb 查看磁盘设备信息如u盘

        mount 挂载u盘和nfs

        mount  -t nfs 主机ip:共享目录  挂载点  mount -t nfs 192.168.1.4:/arm2410s   /mnt

        –onolock加文件锁             mount –t nfs –onolock 192.168.1.4:/home/test  /mnt

        mount –t  msdos /dev/sdb1 mnt/usb    u盘设备是/dev/sdb1 挂载到 /mnt/usb

        mount -t  vfat /dev/sdb1 /mnt/sdcard   挂载u盘

        msdos文件系统参数   如fat32用vfat    fat16用msdos    ext用ext2

        redhat-config-users查看用户

        第2讲 嵌入式交叉开辟环境

        嵌入式linux开辟流程

        1、  建立开辟环境

        2、  配置开辟主机,配置MINICOM(相当于Windows下的超级终端)

        3、  建立引诱装载程序bootloader

        4、  下载别人已经移植好的linux操纵系统

        5、  建立根文件系统

        6、  建立应用程序的flash分区

        7、  开辟应用程序

        8、  烧写内核、根文件系统、应用程序

        9、  宣布产品

        开辟模式 交叉编译

        • 宿主机(Host)是用来开辟嵌入式软件的系统。指要安装虚拟机软件的计算机。

        • 目标机(Target)是被开辟的目标嵌入式系统。指arm设备。

        • 交叉编译器(Cross-compiler)是停止交叉平台开辟的主要软件工具。它是运行在一种处理器体系结构上,但是可以生成在另一种不同的处理器体系结构上运行的目标代码的编译器。

        串口、网线

        虚拟机里头的Linux系统、arm、PC

        ftp在三者中都可以通,nfs为linux和linux系统之间通信,samba服务器是在linux和Windows之间通信,NFS可以将近程文件系统载入在本地文件系统下。

        Redhat近程登录Windows

        Windows近程登录linux  开启Windows和linux里头的telnet服务

        虚拟机和本机网络连同步骤

        1.        关闭防火墙

        2.        网卡激活和设置

        3.        开启服务

        4.        设置为桥接方法

        5.        关掉无线网络

        注意事项

        1、VMwareVirtual Ethernet Adapter for VMnet1和redhat的ip要处在统一网段。

        2、redhat里头网络设置

        3、虚拟机的网络设置host-only

        1BRIDGE:相当于主机和虚拟机连接到统一个hub上,虚拟机要和主机配置到统一网段上

        2 NAT:使用vmnet8,主机开启须要的VMware服务,如vmvaredhcp,虚拟机设置成dhcp方法即可,当然也可以手工设置成vmnet1统一网段,比较费事

        3HOST-ONLY:使用vmnet1,直接和主机互联,可以使用ifconfig查看配置情况

        Linux里头罕见的编辑编程工具Vi   gedit  kwrite   emacs   kdevelop

        第3讲 Linux下的c语言开辟

        交叉编译工具的安装

        先将目录sharefile\ 中的arm-linux-gcc-3.3.2.tgz 、arm-linux-gcc-2.95.3.tgz和

        arm-linux-gcc-3.4.1.tgz 拷贝到某个目录下如tmp\,然后进入到该目录,执行解压命令:

        #cd \tmp

        #tar xvzf arm-linux-gcc-3.3.2.tgz    –C / 

        #tar xvzf arm-linux-gcc-2.95.3.tgz    –C /

        #tar xvzf arm-linux-gcc-3.4.1.tgz    –C /

        #mkdir –p/opt/FriendlyARM/QQ2440  ; 建立工作目录,备用

        然后运行命令

        #gedit /root/.bashrc

        编辑/root/.bashrc 文件,在最后一行  export PATH=$PATH:/usr/local/arm/3.4.1/bin

        (arm上编译,pc上编译)

        1、 编写代码

        2、 编译(双平台)

        3、 执行

        

        gcc的执行过程

        使用gcc由C语言源代码文件生成可执行文件的过程要阅历四个相互关联的步骤∶

        1、预处理(也称预编译,Preprocessing)

        ——仇家文件(include)、预编译语句(如define等)停止分析[预处理器cpp]

        2、编译(Compilation)

        ——将预处理后的文件转换成汇编语言,生成文件.s[编译器ccl]

        每日一道理
    谁说人与人隔着遥远的重洋,谁说心与心设着坚固的堤防?十六岁的鸟儿飞上天空,总会找到落脚的枝头。

        3、汇编(Assembly)

        ——由汇编变为目标代码(机器代码),生成.o的文件[汇编器as]

        4、连接(Linking)

        ——连接目标代码,生成可执行程序[链接器ld]

        

        -I用来指定头文件目录.

        /usr/include目录一般是不用指定的,但是如果头文件不在/usr/include里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上

        - I myinclude参数了,如果不加你会失掉一个“xxxx.h:No such file or directory”的错误。

        eg.

        -includefile

        功能相当于在代码中使用#include

        例子用法:

        gcc -oexample example.c -include /usr/include/stdio.h

        Makefile基本结构

        target:  prerequisites    依附关系

        <TAB>  command           命令

        

        Make工具及makefile文件概述
    1、config 生成make文件
    2、make 生成可执行文件
    3、make install (文件先拷贝至系统路径)将文件安装至指定位置

        4、make clean 清晰make发生的安装文件

        Makefile实例:

        #makefile开始

        myprog : foo.o bar.o 
    gcc foo.o bar.o -o myprog 

        foo.o : foo.c foo.h bar.h 
    gcc -c foo.c -o foo.o 

        bar.o : bar.c bar.h 
    gcc -c bar.c -o bar.o 

        clean:

             -rm *.o myprog

        #makefile结束

        环境变量:

        a)        存储文件名列表。

        b)        存储可执行文件名。

        c)        存储编译器标识。

        d)        存储参数列表。

        使用环境变量后的makefile实例

        =======makefile开始======

        OBJS=foo.o  bar.o

        CC=gcc

        CFLAGS=-Wall–O –g#-WALL开启警告信息–O优化–g可调试

        EXEC=myprog

        $(EXEC):$(OBJS)

             $(CC) $(OBJS) –o $(EXEC)

        foo.o:foo.c  foo.h bar.h

             $(CC) $(CFLAGS) –c foo.c –o foo.o

        bar.o:bar.cbar.h

             $(CC) $(CFLAGS)bar.c –o bar.o

        ========makefile结束=======

        内部变量:

        $@---扩展成以后规则的目标文件名

        $<---扩展成依靠列表中的第一个依靠文件

        $^ ---扩展成整个依靠的列表

        Makefile变量

        =====makefile开始======

        OBJS =foo.o bar.o

        CC = gcc

        CFLAG=-Wall –O –g

        myprog:$(OBJS)

             $(CC) $^ -o $@

        foo.o:foo.cfoo.h bar.h

             $(CC) $(CFLAG) –c $< -o $@

        bar.o:bar.cbar.h

             $(CC) $(CFLAG) –c $< -o $@

        ======makefile结束=======

        第4讲 bootloader与内核

        Bootloader概念:就是在操纵系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个适合的状态,以便为终究调用操纵系统内核准备好准确的环境。

        Bootloader的功能

        1.硬件设备初始化(CPU的主频、SDRAM、中断、串口等)

        2.内核启动参数

        3.启动内核

        4.与主机停止交互,从串口、USB口或者网络口下载映象文件,并可以对FLASH等存储设备停止管理

        嵌入式系统最先执行的是bootloader

        Bootloader的烧写方法

        1.通过JTAG口

        2.通过以太网口

        3.通过串口

        4.其中前两种方法比后一种快得多

        Bootloader的操纵模式

        1.启动加载模式(产品宣布)

        2.下载模式(烧写系统)

        Vivi一个bootloader,编译配置,罕见的bootloader有vivi和uboot。

        内核的扩充make menuconfig内核编译的结果是生成zImage文件

        arch/arm/boot/zImage,可自解压的压缩内核的映像文件

        构建根文件系统  ./mkyaffsimage  root_nfs  root.img

        第5讲 驱动与QT

        目前Linux 支撑的设备驱动大体可分为三种:

        字符设备(character device);如串口、触摸屏、并口、虚拟控制台、AD等。

        块设备(block deivce);诸如磁盘,内存,Flash等。

        网络接口设备(network interface)。eth0等。

        块设设备与字符设备相似,块设备也是通过文件系统来停止拜访,它们之间的区别仅仅在于内核内部管理数据的方法不同。

        传统方法中的设备管理中,除了设备类型外,内核还需要一对称作主次设备号的参数, 才能独一标识一个设备。

        主设备号相同的设备使用相同的驱动程序,次设备号用于区分具体设备的实例。

        为该模块建立一个设备节点。主设备号指某一类设备次设备号指某一个设备。

        命令: mknod /dev/tsc  254 0

        其中/dev/ts表示我们的设备名是ts,“c” 说明它是字符设备,“254” 是主设备号,“0” 是次设备号。

        一旦通过mknod 创建了设备文件,它就一直保留上去,除非我们手工删除它。

        Linux驱动编译和加载方法

        一种是直接编译到内核,当内核启动之后,新的驱动程序随之运行;

        二是编译为模块,动态加载运行。

        对模块操纵需要使用module-utiles:

        insmod将编译的模块直接插入内核

        rmmod从内核中卸载模块

        lsmod表现已安装的模块

        驱动程序与应用程序的区别

        应用程序一般有一个main 函数,从头到尾执行一个任务;

        驱动程序却不同,它没有main 函数,通过使用宏module_init(初始化函数名),将初始化函应用程序可以和GLIBC库连接,因此可以包括标准的头文件,比如<stdio.h>、<stdlib.h>等,;

        在驱动程序中是不能使用标准C 库的,因此不能调用所有的C库函数, 只能调用内核的函数<linux/module.h>。

        Qt是挪威Trolltech公司出品的一个跨平台的C++图形用户界面库。

        测验

        选择        20

        填空        20

        指令操纵  20

        编程        20

        分析        20

    文章结束给大家分享下程序员的一些笑话语录: 手机终究会变成PC,所以ip会比wm更加畅销,但是有一天手机强大到一定程度了就会发现只有wm的支持才能完美享受。就好比树和草,草长得再高也是草,时间到了条件成熟了树就会窜天高了。www.ishuo.cn

    --------------------------------- 原创文章 By
    设备和文件
    ---------------------------------

  • 相关阅读:
    Head first javascript(七)
    Python Fundamental for Django
    Head first javascript(六)
    Head first javascript(五)
    Head first javascript(四)
    Head first javascript(三)
    Head first javascript(二)
    Head first javascript(一)
    Sicily 1090. Highways 解题报告
    Python GUI programming(tkinter)
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3105075.html
Copyright © 2011-2022 走看看