分类: 嵌入式
2010-03-15 23:11:10
如何将从虚拟机上编译的驱动程序和应用程序从ARM板子上CUP中运行呢?
首先要在虚拟机上用make 命令去编译整个文件,然后在该文件夹下就会生成驱动程序对应的.o文件和应用程序的可执行程序.然后利用ifconfig命令去查询虚拟机的IP(在后面进行挂载时会用到).
利用建立超级终端的方式,使PC机能够连接到板子上,可以在PC机上控制板子.接着在超级终端上利用mount -o nolock **.**.**.**.(虚拟机的IP):/up-techpxa270 /mnt/nfs命令进行挂载,以便使虚拟机上的硬件可以充当板子的硬件,板子可以进行操作.
成功挂载后就要动态的加载驱动程序,这里我们用insmod **.o(驱动程序的目标文件);命令进行驱动的加载,如果该驱动程序只是对设备接点进行了注册,而并没有创建设备接点,我们就要手动的创建设备接点.如果该驱动利用了devfs系统自动创建设备接点的话,我们就不用再重新创建设备接点了.
如何手动的创建设备接点呢?首先输入打开驱动程序的.c文件,查看该驱动程序定义的设备名称,如果在驱动中定义了主设备号和从设备号那么我们要记住.如果是此驱动程序采用的是调用函数regisit_chadev()函数动态的生成主设备号,那我们还要利用cat /proc/devices命令从注册的设备列表中,根据从驱动程序中查的名字找到动态分配的主设备号,在获得主、从设备号后我们就可以创建设备接点了.
打开应用程序,查看应用程序中定义的设备名称,然后利用此名称和上面获得的主从设备号,创建设备接点,这里我们用命令mknod 设备名(从应用程序中获得的) 设备类型(c,b) 主设备号 从设备号 ;来创建设备接点了.
创建成功后就可以用./来执行应用程序了.
该实验中的注意事项:
1.手动创建设备接点(设备文件)时,设备名称要和应用程序中调用的设备文件名称相同而不是必须和驱动程序注册的设备接点名称相同,他们之间可以用主设备号去联系到一起.原因是因为应用程序会直接先调用设备文件,而设备文件根据自己的主设备号到内核中去调用已经和此设备号相同的注册的驱动程序,用驱动程序去处理应用程序的请求.
2.在用insmod加载设备驱动时,一般就已经自动在内核中注册了该设备,但还要自动或是手动的创建设备接点,应用程序才能调用设备.