内核空间与用户空间共享内存(mmap)

好多次遇见mmap,但都没有实际实验过,最近终于抽出时间做了个mmap的小实验。这篇博文中的代码是在其他人的基础上修改而成,并非个人原创。

一、mmap实现方法:
将内核的物理内存通过mmap映射到用户空间,直接在用户空间对内核数据进行存取。
1、在内核中分配一片内存(kzalloc/__get_free_pages),将这片内存的虚拟地址转换成物理地址;
2、在内核的mmap函数中通过remap_pfn_range实现内核物理内存空间映射到用户虚拟地址空间转换的功能;
3、在应用程序中可以调用用户态的mmap函数,完成内核物理内存向用户空间的映射;
4、可直接利用这片被映射了的用户空间对内核空间进行存取操作。

二、程序实现功能:
1、创建mmap_dev字符设备,实现该设备的mmap函数;
2、在/proc中创建获取内核中分配的物理内存信息(起始地址和大小)的接口;
3、通过/proc读取内核中分配的物理内存信息(起始地址和大小);
4、通过读取的这些内存信息调用mmap函数,完成用户空间到内核空间的映射;
5、向这片映射过的用户空间写入数据。

Continue reading “内核空间与用户空间共享内存(mmap)” »

Linux字符设备驱动

模块头文件

Continue reading “Linux字符设备驱动” »

Beaglebone Black自动连接wifi

Beaglebone-internet
昨天对wifi进行了配置,每次Linux开机或者wifi模块插入BBB板时,都需要进行重新配置,十分麻烦,特别是身边没有有线网络、miniUSB线和HDMI时,就无法登录到BBB板。为了解决这种情况,可以在BBB板上配置wifi,使wifi模块在Linux开机或者插入已开机的BBB板时自动连接到特定的wifi热点。只接受WPA连接配置,WEP类似。 Continue reading “Beaglebone Black自动连接wifi” »

Beaglebone Black连接wifi

前些日子从废弃的平板上拆下来已块wifi模块,wifi模块用的是Ralink公司的RT3070芯片,模块接口刚好是USB接口。于是今天下午在实验室在模块上焊接了上了一个USB公头,准备连接到Beaglebone Black上。顺便把一条USB延长线的接口处理了下,使USB和HDMI可以同时接入板子,解决了两个端口靠得太近的问题。

焊接完后,把wifi模块接入BBB板,开机,用putty以root用户登陆。

1、查看系统中存在的USB设备

lsusb

输出结果的第一行已经显示了wifi模块RT3070,说明系统中已经有了这个设备的驱动程序。 Continue reading “Beaglebone Black连接wifi” »