弄好的内核模块怎么弄进开发板里面去啊?(我已经用交叉编译器德到了.ko文件)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了弄好的内核模块怎么弄进开发板里面去啊?(我已经用交叉编译器德到了.ko文件)相关的知识,希望对你有一定的参考价值。

如果板子通过NFS起来的,这个最简单,拷贝helloword到NFS export的目录里? 这个怎么配置啊 ?还有我想要rz命令 可是怎么不出对话框呢 ?

这些是初学者经常遇到的问题。我以前也遇到过,所以还是我来回答你吧。首先rz命令是BusyBox里面是不带的,如果你要用就要另外下载一个rz,然后用arm编译之后再放到开发板/bin目录下面。但是我不推荐用rz,速度很慢的。最方便的还是挂载网络文件系统了,如果使用uboot命令如下:
#setenv bootargs "root=/dev/nfs nfsroot=192.168.0.宿主机文件系统路径:/forlinx/root
ip=192.168.0.开发板:192.168.0.宿主机:255.255.255.0 console=ttySAC0,115200"
#saveenv
使用网络文件系统要确保网卡可用!可以在UBOOT下先PING下主机IP;
我的QQ285226942,还要问题的话咱们可以继续探讨
参考技术A 可以,你把环境搭建好就可以编译大部分。
makefile中指定好平台。如果本身驱动不在kernel代码树里,把内核的代码头文件等等手动设定好,如果驱动用到其他库或代码也手动指定好,不要让编译器自动搜索本机环境。

还要查阅下文档,有些代码可能压根就没有为交叉编译而特别编写,这类代码的交叉编译需要你打patch、重写makefile

[嵌入式开发板]iTOP-4412以模块的方式编译驱动

本文转自迅为:http://www.topeetboard.com

 

大家好,本章节我们将向大家讲解如何在 linux 下实现以模块的方式加载内核驱动。我们以内核里面蜂鸣器的

驱动为例来讲解。

1)首先打开内核的源码,如下图所示:

技术分享

 

2)使用命令“cd drivers/char/” ,进入到蜂鸣器驱动所在的目录,如下图所示:

 技术分享

3)然后使用命令“vi Kconfig”打开当前目录下的内核配置文件,如下图所示:

技术分享 

4)然后找到“config BUZZER_CTL”所在的位置,如下图所示:

 

技术分享

5)然后把“bool "Enable BUZZER config"“一行改成”tristate "Enable BUZZER config"“,如下图所示:

 技术分享

 

6)然后保存并退出,如下图所示:

 技术分享

 

7)然后回到内核源码的根目录下,如下图所示:

 技术分享

 

 

8)然后输入命令”make menuconfig“配置内核,如下图所示:

 

 技术分享

 

9)选择” Device Drivers ->"Character devices"->"Enable BUZZER config",如下图所示:

 

 技术分享

 

 

 

10)然后把” Enable BUZZER config “左边的”*“改成”M“,如下图所示:

 

 技术分享

 

11)然后保存并退出配置界面,如下图:

 技术分享

 

12)然后使用命令” vi arch/arm/mach-exynos/mach-itop4412.c“打开 mach-itop4412.c,如下图所示:

 

 技术分享

 

13)然后找到” struct platform_device s3c_device_buzzer_ctl “一行,如下图所示:

 

 技术分享

 

14)把这一行前面的” #ifdef CONFIG_BUZZER_CTL“改成”#if defined(CONFIG_BUZZER_CTL) ||

defined(CONFIG_BUZZER_CTL_MODULE) “,如下图所示:

 

 技术分享

15)然后找到” &s3c_device_buzzer_ctl“一行,如下图所示:

 技术分享

 

16)把这一行前面的” #ifdef CONFIG_BUZZER_CTL“改成”#if defined(CONFIG_BUZZER_CTL) ||

defined(CONFIG_BUZZER_CTL_MODULE) “,如下图所示:

 

 技术分享

 

 

17)然后保存并退出,返回到 linux 内核源码的根目录下,如下图所示:

 

 技术分享

18)然后输入命令”make“,开始编译内核,如下图所示:

 

 技术分享

 

19)编译完成后会在内核的” arch/arm/boot“目录下生成镜像文件”zImage“,如下图所示:

 

 技术分享

20)在内核的” drivers/char“目录下生成了蜂鸣器的驱动模块” itop4412_buzzer.ko“,如下图所示:

 

 技术分享

21)下一步我们烧写生成的 zImage 到开发板上,然后开发板启动进入到 android 系统。

22)然后通过 adb 把蜂鸣器的驱动模块传到开发板的"/data"目录下,如下图所示:

 技术分享

 

23)然后再串口输入命令”cd /data“,进入到开发板的"/data"目录,如下图所示:

 

 技术分享

24)然后输入”ls“命令,可以看到通过 adb 传过来的蜂鸣器驱动模块” itop4412_buzzer.ko “,如下图

所示:

 技术分享

25)接着在串口输入命令” insmod itop4412_buzzer.ko “,加载蜂鸣器的驱动,如下图所示:

 技术分享

26)通过上图可以看到蜂鸣器的驱动已经加载到内核里面了,接着输入命令“cd /dev” ,如下图所示:

 

 技术分享

27) 通过上面的图片, 可以看到生成了“ buzzer_ctl” 蜂鸣器的节点了 ,我们需要输入“ chmod 777 buzzer_ctl

命令来修改下 buzzer_ctl 的权限,如下图所示:

 技术分享

 

 

28)然后我们可以使用 android 自带的蜂鸣器小程序来控制蜂鸣器了,至此以模块的方式加载驱动就完成了。

上面我们的驱动是放在了内核源码的目录下来实现的编译成驱动模块,很多时候我们都是拿到一个驱动源码,

不需要把他放到内核源码里面,而是直接把他编译成驱动模块,下面我们来讲下实现方法,我们还是以蜂鸣器

的驱动为例来讲解。

1) 因为开发板带的内核默认是把蜂鸣器直接编译到内核里面了, 所以我们要重复前边的步骤 “1” 到步骤 “19” ,

完成这些步骤以后,把生成的镜像“zImage”烧写到开发板。

2)然后在虚拟机的目录下用命令 mkdir 建立文件夹“module” ,如下图所示:

 

 技术分享

 

3)然后用命令 cd 进入到建立的“module”文件夹,如下图所示:

 技术分享

 

4)拷贝内核里面的蜂鸣器驱动到 module 文件夹,如下图所示:

 技术分享

 

5)然后在 module 文件夹建立文件“Makefile” ,如下图所示:

 

 技术分享

6)然后在"Makefile"文件输入下面的信息:

obj-m += itop4412_buzzer.o

KDIR := /home/broswer/iTop4412_Kernel_3.0

PWD = $(shell pwd)

all:

make -C $(KDIR) M=$(PWD) modules

clean:

rm -rf *.o

其中的“KDIR := /home/broswer/iTop4412_Kernel_3.0"是指定我们内核源码所在的目录,我这里内核源码

是放在了” /home/broswer/“目录下面,需要根据自己的存放位置来修改这个地方

7)然后保存并退出 Makefile,在终端输入”make“命令,编译蜂鸣器驱动,如下图所示:

 技术分享

 

8)编译完成后,可以看下在”module“文件夹下面生成了” itop4412_buzzer.ko“,如下图所示:

 

 技术分享

 

9)然后可以参照前面的步骤”22“来测试我们编译的蜂鸣器驱动了。

 

以上是关于弄好的内核模块怎么弄进开发板里面去啊?(我已经用交叉编译器德到了.ko文件)的主要内容,如果未能解决你的问题,请参考以下文章

ARM开发板linux下用I2C读取mpu6050的数据

[嵌入式开发板]iTOP-4412以模块的方式编译驱动

C# 怎么将ushort数组里面的数据拷贝到IntPtr里面去啊

linux设备驱动的模块编译

内核配置七百问网视频说明文件

linux安装内核模块问题