嵌入式linux学习笔记20160729-每天进步一点点,向嵌入式进军-字符设备驱动之LED,中断
时间:10-02
整理:3721RD
点击:
U-boot, uImage编译完成,烧写进开发板,蜂鸣器叫,启动报错VFS: Cannot open root device "mtdblock3" or unknown-block(31,3)
咨询老师后,说是文件系统未烧录,可是linux内核明明配置了yaffs2,先不管了,以后再看,用uBoot烧录根文件系统后运行成功,但蜂鸣器仍叫,查询对比JZ2440和MINI2440管脚定义,GPB0在JZ2440用作背光使能,在MINI2440用来驱动蜂鸣器,由此可知,该内核配置是针对JZ2440的,修改内核背光驱动管脚定义,改为MINI2440背光使能引脚,重新编译后烧录,蜂鸣器真不响了,背光也有,说明修改成功。
开发板成功启动,接下来就是挂在NFS, mount -t nfs -o nolock,vers=2 192.168.1.110:/home/mine/work/nfs_root /mnt /home/mine/work/nfs_root为虚拟机内文件夹路径,需要在/etc/exports里加进去, /mnt为开发板内文件夹,文件夹路径和名称自由定义,若挂载不成功,先ping一下网,一般是ping不通的,检查开发板ip,虚拟机ip,主机ip,连接好网线,虚拟机设置为桥接,选择网卡,有时自动ping不通,因为有可能连接到无线网卡,确认完这些后,应该就没有问题了,然后就正式进入驱动程序学习了。
首先是学习字符设备驱动程序框架,格式千篇一律:
1。file_operation结构体搭好:open read等放进去
2。写open read函数
3。 写入口函数:注册设备,告诉内核,自动创建主设备号,GPIO地址映射
4。写出口函数,与入口函数相反
5。修饰入口和出口函数
驱动程序和裸机程序有很大的差异,驱动程序挂在内核上,提供接口给内核去调用,需要调用内核的很多函数,以及内核的运行机制,需要对内核熟悉,这就是驱动程序的难点。
咨询老师后,说是文件系统未烧录,可是linux内核明明配置了yaffs2,先不管了,以后再看,用uBoot烧录根文件系统后运行成功,但蜂鸣器仍叫,查询对比JZ2440和MINI2440管脚定义,GPB0在JZ2440用作背光使能,在MINI2440用来驱动蜂鸣器,由此可知,该内核配置是针对JZ2440的,修改内核背光驱动管脚定义,改为MINI2440背光使能引脚,重新编译后烧录,蜂鸣器真不响了,背光也有,说明修改成功。
开发板成功启动,接下来就是挂在NFS, mount -t nfs -o nolock,vers=2 192.168.1.110:/home/mine/work/nfs_root /mnt /home/mine/work/nfs_root为虚拟机内文件夹路径,需要在/etc/exports里加进去, /mnt为开发板内文件夹,文件夹路径和名称自由定义,若挂载不成功,先ping一下网,一般是ping不通的,检查开发板ip,虚拟机ip,主机ip,连接好网线,虚拟机设置为桥接,选择网卡,有时自动ping不通,因为有可能连接到无线网卡,确认完这些后,应该就没有问题了,然后就正式进入驱动程序学习了。
首先是学习字符设备驱动程序框架,格式千篇一律:
1。file_operation结构体搭好:open read等放进去
2。写open read函数
3。 写入口函数:注册设备,告诉内核,自动创建主设备号,GPIO地址映射
4。写出口函数,与入口函数相反
5。修饰入口和出口函数
驱动程序和裸机程序有很大的差异,驱动程序挂在内核上,提供接口给内核去调用,需要调用内核的很多函数,以及内核的运行机制,需要对内核熟悉,这就是驱动程序的难点。