赞
踩
我的开发环境:
内核版本4.1.15
开发板正点原子阿尔法IMX6ULL开发板
source insight写代码,搭建samba服务器与Ubuntu虚拟机共享代码所在目录,Ubuntu与开发板使用nfs共享代码目录。
无操作系统时的驱动(裸机)
有的时候并不一定需要操作系统,比如用亠些行简单的通断控制,从编程角度来说,直接控制寄存器就可以了,也就是直接和硬件打交道。
有操作系统时的驱动(Linux系统)
从编程角度看:有了操作系统以后,编写驱动就变的比较复杂,要基于Linux种驱动框架进行编程。但是当驱动都按照系统给出的框架进行编程以后,就可以提供一个统一的接口给应用程序调用。
驱动针对的对象是存储器和外设(包括CPU内部集成的存储器和外设),而不是针对CPU内核。Linux将存储器和外设分为3个基础大类。
块设备可以按任意顺序进行访问,以块为单位进行操作,如硬盘、eMMC等。
字符设备和块设备的驱动设计有出很大的差异,但是对于用户而言,它们都要使用文件系统的操作接口open()、close()、read()、write()等进行访问。
在Linux系统中,网络设备面向数据包的接收和发送而设计,它并不倾向于对应于文件系统的节点。
内核与网络设备的通信与内核和字符设备、网络设备的通信方式完全不同,前者主要还是使用套接字接口。
除网络设备外,字符设备与块设备都被映射到Linux文件系统的文件和目录,通过文件系统的系统调用接口open()、write()、read()、close()等即可访问字符设备和块设备。所有字符设备和块设备都统一呈现给用户。Linux的块设备有两种访问方法:一种是类似dd命令对应的原始块设备,如“/dev/sdb1”等;另外一种方法是在块设备上建立FAT、EXT4、BTRFS等文件系统,然后以文件路径如“/home/barry/hello.txt”的形式进行访问。在Linux中,针对NOR、NAND等提供了独立的内存技术设备(Memory Technology Device,MTD)子系统,其上运行YAFFS2、JFFS2、UBIFS等具备擦除和负载均衡能力的文件系统。针对磁盘或者Flash设备的FAT、EXT4、YAFFS2、JFFS2、UBIFS等文件系统定义了文件和目录在存储介质上的组织。而Linux的虚拟文件系统则统一对它们进行了抽象。
应用程序可以使用Linux的系统调用接口编程, 但也可使用C库函数, 出于代码可移植性的目的, 后者更值得推荐。 C库函数本身也通过系统调用接口而实现, 如C库函数fopen() 、 fwrite() 、 fread() 、fclose() 分别会调用操作系统的API open() 、 write() 、 read() 、 close() 。
Linux内核源代码包含如下目录。(cursor)
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16
执行“make distclean”,清理工程,所以 mx6ull_alientek_emmc.sh 每次都会清理一下工程。如果通过图形界面配置了 Linux,但是还没保存新的配置文件,那么就要慎重使用mx6ull_alientek_emmc.sh 编译脚本了,因为它会把你的配置信息都删除掉!
执行“make xxx_defconfig”,配置工程。
执行“make menuconfig”,打开图形配置界面,对 Linux 进行配置,如果不想每次编译都打开图形配置界面的话可以将这一行删除掉。
执行“make”,编译 Linux 源码。
可以看出,Linux 的编译过程基本和uboot 一样,都要先执行“make xxx_defconfig”来配置
一下,然后在执行“make”进行编译。如果需要使用图形界面配置的话就执行“make menuconfig”。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。