导航:首页 > 源码编译 > 海思编译驱动模块

海思编译驱动模块

发布时间:2022-07-04 10:53:28

① 如何把自己的驱动编译进内核或模块

我们知道若要给linux内核添加模块(驱动)有如下两种方式:
(1)动态方式:采用insmod命令来给运行中的linux加载模块。
(2)静态方式:修改linux的配置菜单,添加模块相关文件到源码对应目录,然后把模块直接编译进内核。
对于动态方式,比较简单,下面我们介绍如何采用静态的方式把模块添加到内核。
最终到达的效果是:在内核的配置菜单中可以配置我们添加的模块,并可以对我们添加的模块进行编译。
一. 内核的配置系统组成
首先我们要了解Linux 2.6内核的配置系统的原理,比如我们在源码下运行“make menuconfig ”为神马会出现一个图形配置菜单,配置了这个菜单后又是如何改变了内核的编译策略滴。
内核的配置系统一般由以下几部分组成:
(1)Makefile:分布在Linux内核源代码中的Makefile,定义Linux内核的编译规则。
(2)配置文件(Kconfig):给用户提供配置选项,修改该文件来改变配置菜单选项。
(3)配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释),配置用户界面(提供字符界面和图形界面)。这些配置工具都是使用脚本语言编写的,如Tcl/TK、Perl等。
其原理可以简述如下:这里有两条主线,一条为配置线索,一条为编译线索。配置工具根据kconfig配置脚本产生配置菜单,然后根据配置菜单的配置情况生成顶层目录下的.config,在.config里定义了配置选择的配置宏定义,如下所示:

如上所示,这里定义的这些配置宏变量会在Makefile里出现,如下所示:

然后make 工具根据Makefile里这些宏的赋值情况来指导编译。所以理论上,我们可以直接修改.config和Makefile来添加模块,但这样很麻烦,也容易出错,下面我们将会看到,实际上我们有两种方法来很容易的实现。

二. 如何添加模块到内核
实际上,我们需要做的工作可简述如下:
(1)将编写的模块或驱动源代码(比如是XXOO)复制到Linux内核源代码的相应目录。
(2)在该目录下的Kconfig文件中依葫芦画瓢的添加XXOO配置选项。
(3)在该目录的Makefile文件中依葫芦画瓢的添加XXOO编译选项。
可以看到,我们奉行的原则是“依葫芦画瓢”,主要是添加。
一般的按照上面方式又可出现两种情况,一种为给XXOO驱动添加我们自己的目录,一种是不添加目录。两种情况的处理方式有点儿不一样哦。

三. 不加自己目录的情况
(1)把我们的驱动源文件(xxoo.c)放到对应目录下,具体放到哪里需要根据驱动的类型和特点。这里假设我们放到./driver/char下。
(2)然后我们修改./driver/char下的Kconfig文件,依葫芦添加即可,如下所示:

注意这里的LT_XXOO这个名字可以随便写,但需要保持这个格式,他并不需要跟驱动源文件保持一致,但最好保持一致,等下我们在修改Makefile时会用到这个名字,他将会变成CONFIG_LT_XXOO,那个名字必须与这个名字对应。如上所示,tristate定义了这个配置选项的可选项有几个,help定义了这个配置选项的帮助信息,具体更多的规则这里不讲了。

(3)然后我们修改./driver/char下的Makefile文件,如下所示:

这里我们可以看到,前面Kconfig里出现的LT_XXOO,在这里我们就需要使用到CONFIG_XXOO,实际上逻辑是酱汁滴:在Kconfig里定义了LT_XXOO,然后配置完成后,在顶层的.config里会产生CONFIG_XXOO,然后这里我们使用这个变量。
到这里第一种情况下的添加方式就完成了。
四. 添加自己目录的情况
(1)在源码的对应目录下建立自己的目录(xxoo),这里假设为/drivers/char/xxoo 。
(2) 把驱动源码放到新建的xxoo目录下,并在此目录下新建Kconfig和Makefile文件。然后给新建的Kconfig和Makefile添加内容。
Kconfig下添加的内容如下:

这个格式跟之前在Kconfig里添加选项类似。
Makefile里写入的内容就更少了:

添加这一句就可以了。
(3)第三也不复杂,还是依葫芦画瓢就可以了。
我们在/drivers/char目录下添加了xxoo目录,我们总得在这个配置系统里进行登记吧,哈哈,不然配置系统怎么找到们呢。由于整个配置系统是递归调用滴,所以我们需要在xxoo的父目录也即char目录的Kconfig和Makefile文件里进行登记。具体如下:
a). 在drivers/char/Kconfig中加入:source “drivers/char/xxoo/Kconfig”
b). 在drivers/char/Makefile中加入:obj-$(CONFIG_LT_XXOO) += xxoo/
添加过程依葫芦画瓢就可以了,灰常滴简单。

② 如何编译加载linux驱动和内核模块

linux下编译运行驱动
嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发。
按照如下方法就可以成功编译出hello world模块驱动。
1、首先确定本机linux版本
怎么查看Linux的内核kernel版本?
'uname'是Linux/unix系统中用来查看系统信息的命令,适用于所有Linux发行版。配合使用'uname'参数可以查看当前服务器内核运行的各个状态。
#uname -a
Linux whh 3.5.0-19-generic #30-Ubuntu SMPTue Nov 13 17:49:53 UTC 2012 i686 i686 i686 GNU/Linux

只打印内核版本,以及主要和次要版本:
#uname -r
3.5.0-19-generic

要打印系统的体系架构类型,即的机器是32位还是64位,使用:
#uname -p
i686

/proc/version 文件也包含系统内核信息:
# cat /proc/version
Linux version 3.5.0-19-generic(buildd@aatxe) (gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) ) #30-UbuntuSMP Tue Nov 13 17:49:53 UTC 2012

发现自己的机器linux版本是:3.5.0-19-generic
2、下载机器内核对应linux源码

③ 如何编译一个linux下的驱动模块

按照《linux设备驱动开发详解》一书中的步骤实现经典例子"hello,world!"的例子。
具体步骤如下:
=============================================
1.源码如下:
/*
* hello.c -- the example of printf "hello world!" in the screen of driver program
*/
#include <linux/init.h>
#include <linux/mole.h>
MODULE_LICENSE("Dual BSD/GPL");/* declare the license of the mole ,it is necessary */
static int hello_init(void)
{
printk(KERN_ALERT "Hello World enter!\n");
return 0;
}
static int hello_exit(void)
{
printk(KERN_ALERT "Hello world exit!\n");
}
mole_init(hello_init); /* load the mole */
mole_exit(hello_exit); /* unload the mole */
进入目录:
[root@Alex_linux /]#cd /work/jiakun_test/moletest
[root@Alex_linux moletest]# vi hello.c
然后拷入上面书上的源码。
2.编译代码:
1>.首先我在2.4内核的虚拟机上进行编译,编译过程如下:
[root@Alex_linux moletest]#gcc -D__KERNEL__ -I /usr/src/linux -DMODULE -Wall -O2 -c -o hello.o hello.c
其中-I选项指定内河源码,也就是内核源码树路径。编译结果:
hello.c:1:22: net/sock.h: No such file or directory
hello.c: In function `hello_init':
hello.c:6: warning: implicit declaration of function `printk'
hello.c:6: `KERN_ALERT' undeclared (first use in this function)
hello.c:6: (Each undeclared identifier is reported only once
hello.c:6: for each function it appears in.)
hello.c:6: parse error before string constant
hello.c: In function `hello_exit':
hello.c:11: `KERN_ALERT' undeclared (first use in this function)
hello.c:11: parse error before string constant
hello.c: At top level:
hello.c:13: warning: type defaults to `int' in declaration of `mole_init'
hello.c:13: warning: parameter names (without types) in function declaration
hello.c:13: warning: data definition has no type or storage class
hello.c:14: warning: type defaults to `int' in declaration of `mole_exit'
hello.c:14: warning: parameter names (without types) in function declaration
hello.c:14: warning: data definition has no type or storage class
在网上查询有网友提示没有引入kernel.h
解决:vi hello.c
在第一行加入:#include <linux/kernel.h>
再次编译仍然报KERN_ALERT没有声明
修改编译条件-I,再次编译:
[root@Alex_linux moletest]#gcc -D__KERNEL__ -I /usr/src/linux -DMODULE -Wall -O2 -c -o hello.o hello.c
[root@Alex_linux moletest]#ls
hello.c hello.o Makefile
[root@Alex_linux moletest]#
2>.接着我尝试在2.6内核的虚拟机上进行编译
编译过程如下:
[root@JiaKun moletest]# ls
hello.c makefile
[root@JiaKun moletest]# vi hello.c
[root@JiaKun moletest]# make
make -C /mylinux/kernel/2.4.18-rmk7 M=/home/alex/test/moletest moles
make: *** /mylinux/kernel/2.4.18-rmk7: No such file or directory. Stop.
make: *** [moles] Error 2
[root@JiaKun moletest]# vi makefile
[root@JiaKun moletest]# make
make -C /usr/src/kernels/2.6.18-53.el5-i686 M=/home/alex/test/moletest moles
make[1]: Entering directory `/usr/src/kernels/2.6.18-53.el5-i686'
scripts/Makefile.build:17: /home/alex/test/moletest/Makefile: No such file or directory
make[2]: *** No rule to make target `/home/alex/test/moletest/Makefile'. Stop.
make[1]: *** [_mole_/home/alex/test/moletest] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.18-53.el5-i686'
make: *** [moles] Error 2
[root@JiaKun moletest]# mv makefile Makefile
[root@JiaKun moletest]# make
make -C /usr/src/kernels/2.6.18-53.el5-i686 M=/home/alex/test/moletest moles
make[1]: Entering directory `/usr/src/kernels/2.6.18-53.el5-i686'
CC [M] /home/alex/test/moletest/hello.o
Building moles, stage 2.
MODPOST
CC /home/alex/test/moletest/hello.mod.o
LD [M] /home/alex/test/moletest/hello.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.18-53.el5-i686'
[root@JiaKun moletest]# ls
hello.c hello.ko hello.mod.c hello.mod.o hello.o Makefile Mole.symvers

④ 嵌入式linux没有源码包,我该怎么编译驱动模块

大部分的思路都是如上,大部分的编译器就是特定的芯片厂商提供好的交叉编译器,但也需要gcc编译器来作为承载,就是说:需要移植的编译器是在gcc的基础上做相应添加库,添加规则等而成,现在大部分linux发行版的kernel中90%以上代码都是相似的,自己添加自己特有驱动等等就可以了,没人会修改其他的代码,也没能力去修改。

⑤ 如何编译linux驱动模块

第一步:准备源代码

首先我们还是要来编写一个符合linux格式的模块文件,这样我们才能开始我们的模块编译。假设我们有一个源文件mymod.c。它的源码如下:

mymoles.c
1. #include <linux/mole.h> /* 引入与模块相关的宏 */
2. #include <linux/init.h> /* 引入mole_init() mole_exit()函数 */
3. #include <linux/moleparam.h> /* 引入mole_param() */
4
5. MODULE_AUTHOR("Yu Qiang");
6. MODULE_LICENSE("GPL");
7
8. static int nbr = 10;
9. mole_param(nbr, int, S_IRUGO);
10.
11. static int __init yuer_init(void)
12.{
13. int i;
14. for(i=0; i<nbr; i++)
15. {
16. printk(KERN_ALERT "Hello, How are you. %d/n", i);
17. }
18. return 0;
19.}
20.
21.static void __exit yuer_exit(void)
22.{
23. printk(KERN_ALERT"I come from yuer's mole, I have been unlad./n");
24.}
25.
26. mole_init(yuer_init);
27. mole_exit(yuer_exit);

我们的源文件就准备的差不多了,这就是一个linux下的模块的基本结构。第9行是导出我们的符号变量nbr。这样在你加载这个模块的时候可以动态修改这个变量的值。稍后将演示。yuer_init()函数将在模块加载的时候运行,通过输出的结果可以看到我们的模块是否加载成功。

第二步:编写Makefile文件

首先还是来看看我们Makefile的源文件,然后我们再来解释;

Makefile
obj-m := moles.o #要生成的模块名
moles-objs:= mymod.o #生成这个模块名所需要的目标文件

KDIR := /lib/moles/`uname -r`/build
PWD := $(shell pwd)

default:
make -C $(KDIR) M=$(PWD) moles

clean:
rm -rf *.o .* .cmd *.ko *.mod.c .tmp_versions

ARM平台
Makefile

obj-m += mymod.o
KDIR := /home/workspace2/kernel/linux-2.6.25 #如果是用于arm平台,则内核路径为arm内核的路径
PWD = $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) moles
clean:
rm -rf *.o

在arm板上插入是
insmod mymod
如果出现以下错误
insmod: chdir(/lib/moles): No such file or directory
则运行
mkdir /lib/moles/2.6.25 (与arm内核版本相同)
并将mymod.ko文件复制到该目录下
cp mymod.ko /lib/moles/2.6.25
然后再执行 (insmod 只在/lib/moles/2.6.25目录下查找相关驱动模块)
insmod mymod

现在我来说明一下这个Makefile。请记住是大写的Makefile而不是小写的makefile;
obj-m :这个变量是指定你要声称哪些模块模块的格式为 obj-m := <模块名>.o
moles-objs :这个变量是说明声称模块moles需要的目标文件 格式要求 <模块名>-objs := <目标文件>
切记:模块的名字不能取与目标文件相同的名字。如在这里模块名不能取成 mymod;
KDIR :这是我们正在运行的操作系统内核编译目录。也就是编译模块需要的环境
M= :指定我们源文件的位置
PWD :这是当前工作路径$(shell )是make的一个内置函数。用来执行shell命令。

第三步:编译模块

现在我们已经准备好了我们所需要的源文件和相应的Makefile。我们现在就可以编译了。在终端进入源文件目录输入make
运行结果:
make[1]: Entering directory `/usr/src/linux-headers-2.6.24-24-generic'
CC [M] /home/yuqiang/桌面/mymole/mymoles.o
LD [M] /home/yuqiang/桌面/mymole/moles.o
Building moles, stage 2.
MODPOST 1 moles
CC /home/yuqiang/桌面/mymole/moles.mod.o
LD [M] /home/yuqiang/桌面/mymole/moles.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-24-generic'

第四步:加载/卸载我们的模块

从上面的编译中我可以看到。已经有一个moles.ko生成了。这就是我们的模块了。现在我们就可以来加载了。
首先在终端输入:sudo insmod moles.ko
现在我们来看看我们的模块加载成功没有呢?
在终端输入:dmesg | tail -12 这是查看内核输出信息的意思。tail -12 显示最后12条;
显示结果如下:
[17945.024417] sd 9:0:0:0: Attached scsi generic sg2 type 0
[18046.790019] usb 5-8: USB disconnect, address 9
[19934.224812] Hello, How are you. 0
[19934.224817] Hello, How are you. 1
[19934.224818] Hello, How are you. 2
[19934.224820] Hello, How are you. 3
[19934.224821] Hello, How are you. 4
[19934.224822] Hello, How are you. 5
[19934.224824] Hello, How are you. 6
[19934.224825] Hello, How are you. 7
[19934.224826] Hello, How are you. 8
[19934.224828] Hello, How are you. 9

看到了吧。我们的模块的初始化函数yuer_init();已经成功运行了。说明我们的模块已经加载成功;
现在我们再来卸载模块试试看。
在终端输入:sudo rmmod moles
在终端输入:dmesg | tail -3
[19934.224826] Hello, How are you. 8
[19934.224828] Hello, How are you. 9
[20412.046932] I come from yuer's mole, I have been unlad.

可以从打印的信息中看到,我们的模块的退出函数已经被执行了。说明我们的模块已经被成功的卸载了。到目前位置我们就已经算是对模块的编译到编译运行算是有了一个整体上的认识了。对于以后深入的学习还是应该有点帮助的。下面我们将在看看于模块相关的一些简单的操作。

第五步:加载模块时传递参数
在终端输入:sudo insmod mole_name.ko nbr=4
在终端输入:dmesg | tail -6
显示结果如下:
[20800.655694] Hello, How are you. 9
[21318.675593] I come from onefile mole, I have been unlad.
[21334.425373] Hello, How are you. 0
[21334.425378] Hello, How are you. 1
[21334.425380] Hello, How are you. 2
[21334.425381] Hello, How are you. 3

这样我们就可以看到在模块加载的时候动态设置了我们的一个变量。初始化函数中的循环只执行了4次。
可能你会问我怎么知道一个模块可以设置那些变量呢。当然,你可以先不设变量加载一次。然后可以在终端输入ls /sys/mole/<moles_name>/parameters/来查看。在这里我们是这样输入的
在终端输入:ls /sys/moedle/moles/parameters/
显示结果:
nbr

如果我们的模块加载成功了。最后我们还可以通过modinfo来查看我们的模块信息。如下
在终端输入:sudo modinfo moles.ko
显示结果:
filename: moles.ko
license: GPL
author: Yu Qiang
srcversion: 20E9C3C4E02D130E6E92533
depends:
vermagic: 2.6.24-24-generic SMP mod_unload 586
parm: nbr:int

⑥ 请教下,编译驱动模块出现的警告

先把你的mole里面全部东西都去掉,只留下空的mole_init和mole_exit和MODULE信息的那几个宏,看看能不能编译过去。不行的话就是你头文件里面有问题了。

⑦ 海思的音频 怎么跟alsa 或者oss 这种音频编程衔接

在声卡的驱动中一种是OSS(开放声音系统),一种是ALSA(先进Linux声音架构)。OSS是一个商业声卡驱动程序,需要花钱购买。一般我们现在使用的是ALSA的声音架构。
Advanced Linux Sound Architecture 的简称为 ALSA,译成中文的意思是 Linux 高级声音体系,ALSA不仅仅是包括对声卡的支持和驱动;
它的特征如下:
1、对所有音频接口的高效支持,从普通用户的声卡到专业级别多路音频设备;
2、声卡驱动完全模块化设计;
3、SMP and thread-safe design.
4、开发库(alsa-lib) 为程序设计提供了简单、方便,并且拥有有高级的效果和功能;
5、支持旧版本的OSS API 结口,能为大多数的OSS应用程序提供兼容;OSS是一个商业性的驱动,OSS有一个简装本的代码已经移入内核和ALSA,其中alsa-oss就是;OSS公司据说目前已经并不存在了;我们没有必要用OSS 公司提供的商业版本;用ALSA和OSS简装版足够;
如何查看硬件芯片;
在Linux操作系统中,所有的硬件都是以芯片组来区分的,品牌并不是最重要的;硬件最重要的标识是芯片组;所以您在讨论区求助的时候,只说硬件品牌,而不提供芯片组,大家是帮助不了您的,切记;
我们查看硬件的芯片组是的命令是 lspci -v 或者是dmesg,由于dmesg输出的信息不太多,不够直观;所以经常用的还是lspci -v ;也可以用lshal 获取;最方便的还是lspci -v;初学者还是用 lspci -v 更好一点;
代码:
[root@localhost beinan]# lspci -v
我们运行lspci -v 后,如果查看声卡芯片组,发会现有类似下面的一段;
[root@localhost beinan]# lspci -v
Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M)
AC'97 Audio Controller (rev 03)
Subsystem: Hewlett-Packard Company: Unknown device 3080
2.6.11-1.1369_FC4 i686 i686 i386
上面的表示的是系统的内核版本,处理器架构等;lsmod 查看已经加载的内核模块;
如果一个设备在内核的编译中是以模块方式加载的,主要是通过lsmod 来查看;
[root@localhost beinan]# lsmod
可能初学Linux的弟兄会问,内核的mole存放在哪里,我们能不能自己来手工加载模块;内核的模块放在 /lib/moles/内核的版本/kernel/ ,比如在Fedora 4.0 中,我们可以看到如下的:
[root@localhost beinan]# ls /lib/moles/2.6.11-1.1369_FC4/kernel/
arch/crypto/drivers/ fs/lib/ net/ sound/其中,sound 就是声卡模块存放目录,大多数的硬件驱动放在 drivers目录,fs 是文件系统模块的目录;net是与网络有关的存放目录,比如一些网络协议支持的模块、防火墙支持的模块等;arch 是cpu方面 ... ...
如果我们想自己加载模块,就到这些目录中查看相应模块的信息,然后用 modprobe 来加载;
[root@localhost beinan]# modinfo snd-intel8x0
查看一个模块的信息,我们用 modinfo 来查看,所要查看的模块不要带 .ko 或者.o 之类的;比如查看到类似下面的信息;
description: Intel 82801AA,82901AB,i810,i820,i830,i840,i845,MX440; SiS 7012; Ali 5455
通过这个我们足可以知道这是Intel 集成声卡,通过lspci -v 得到的声卡信息,感觉他们很相近;所以就能尝试用这个模块来驱动;
[root@localhost beinan]# modprobe snd-intel8x0
用 modprobe 加载了模块,然后我们通过 lsmod 就能看到了;对于声卡模块是这么加载的,其它设备的驱动模块也是如此。

⑧ linux内核怎么单独编译驱动模块

你可能需要手动创建设备节点,首先cat /proc/device 看看能否找到video的设备号,再用mknod命令创建/dev/下的设备节点,如果没有再考虑去内核make menuconfig查看相关驱动选项有没有勾上。

⑨ 海思hi3520编译x264库吗

刚到手的Hi3520开发板,拿来第一件事当然是搭环境,本来调了那么多板子,这不是小菜一碟嘛,可就是挂NFS还浪费了快一个小时,郁闷的了,这倒也好,顺着Hi3520的脉络,就把这个环境搭建过程记录一下,权当记个笔记噻。。。
买的是雅仪科技的Hi3520开发板,板子还是蛮好看滴,6800大洋。因为最多要驱动八块sata硬盘,所以板子采用的是计算机的ATX电源。拿过来之后立马接上串口,上电,擦,毫无反应,这是神马情况,打电话一问才知道板子本身接出来的串口不是调试串口,UART0要我自己做根线接出来,我勒个去。。。
然后开始挂NFS,本来很简单的一件事儿,可就因为公司的网络折腾了我好一会儿,我自己习惯用ubuntu,可ubuntu严重依赖网络啊,公司的网络受限,我执行sudo apt-getinstall nfs-kernel-server丫根本不能装,么有办法了,只能曲线救国,换成Fedora,这下能搞的吧。
这里把ubuntu和Fedora下NFS挂载的基本步骤说明下,后面再说明下要注意的问题:
先说ubuntu下面的:
1、安装nfs服务
执行命令:sudo apt-get install nfs-kernel-server
安装nfs-kernel-server时会自动安装nfs-common和portmap
2、修改/etc/exports文件
执行命令:vim /etc/exports
一般刚安装的nfs-kernel-server服务则这个文件内容应该为空,在文件中加上下面一行
/root/Hi3520192.168.1.244(rw,sync,no_root_squash)
这里的/root/Hi3520表示你linux主机上的共享目录,IP地址你可以改为你开发板的IP,后面的参数网上说的已经很多了,不必过多说明
3、设置linux主机的IP地址,这个不用多说了哎
4、重启nfs服务
执行命令:
sudo/etc/init.d/portmap restart
sudo/etc/init.d/nfs-kernel-server restart

再说Fedora下面的:
Fedora下面稍微复杂,但是Fedora的NFS服务在安装系统的时候已经存在,我们只需配置并将其开启
1、开启nfs服务
在终端下输入setup,在弹出的菜单中选择“系统服务”,讲其中的netconsole,netplugd,nfs服务选上(按空格键选择或者取消)。并按TAB键确认退出
在终端中输入service nfs restart重启nfs服务
2、修改/etc/exports文件
此处同ubuntu中的操作
3、设置linux主机端的网络
这里就不仅仅是设置IP了,还要设置下网络
在虚拟机(我这里用的是VMware)菜单中依次选择”edit->virtual networksetting->Host virtual network mapping”,在第一个下拉菜单中选择一个已经存在的网卡,就是你PC上真实的网卡,并按“应用”,“确认”
关闭虚拟机,确认Network connection为bridged模式

上面是linux主机端的一些设置,下面说点需要注意的问题,因为我们很多人挂NFS的时候是将PC机和开发板用一根网线直接连接,这个时候IP地址你可以随便设,但是这样的话在开发的时候就不能上网了,所以很多人利用一个小humble将PC机和开发板同时接入局域网中,这个时候设置IP的时候您就不要昏头了啊,一定要先确认这个IP是能用的哎,还有就是虚拟机的network connection要选桥接呀。

再说下Hi3520开发板的设置吧,我看很多开发板是通过在uboot中设置bootargs让linux启动的时候就直接挂载NFS,而海思的板子都是在板子进入linux之后通过执行脚本来挂载NFS的,个人觉得后者比较灵活,我想挂就挂,前者就略显麻烦了哎
海思的文档里面信誓当当的把脚本写好啦
modprobe mmzmmz=ddr,0,0xC2000000,16M /*插入mmz模块,网口驱动会使用该模块*/
modprobe hiether /*插入网口驱动模块*/
ifconfig eth0 hw ether00:10:85:18:01:84 /*配置MAC地址*/
ifconfig eth010.85.180.184 netmask 255.255.254.0 /*配置IP地址和子网掩码*/
route add default gw10.85.180.1 /*配置默认网关*/
modprobe nfs /*插入NFS模块*/
mount -t nfs -o nolock10.85.180.133:/home/c54122/glibc-nfs /mnt
和3515的文档上一模一样,可是你丫网卡驱动有变化呀,不负责任哎,改了连文档也不更新,而且我这板子上用的是千兆网卡,还得设置一下模式,我擦,贴上我的脚本内容,IP地址和主机端的NFS目录根据情况自己改呀
modprobemmz mmz=ddr,0,0xC2000000,16M
modprobeh2gether port_mode=1
ifconfigeth0 hw ether DC:07:C1:FE:26:D3
ifconfigeth0 192.168.1.244 netmask 255.255.255.0
routeadd default gw 192.168.1.1
modprobenfs
mount-t nfs -o nolock 192.168.1.233:/root/Hi3520 /mnt
执行这个脚本,NFS就挂载上啦,然后可以开发喽

最后还有一个问题注意下,ubuntu下安装3520的SDK时,可能很多人会报错,那是ubuntu将默认的shell改成了dash,改回去就是了呀,执行命令sudo dpkg-reconfigure dash,然后选择“否”,over!

⑩ make moles编译驱动模块,只生成.o文件没有.ko文件...这是怎么回事

file1.o和file2.o指的是编译出来的源文件有两个分别是file1.c和file2.c

阅读全文

与海思编译驱动模块相关的资料

热点内容
喷油螺杆制冷压缩机 浏览:581
python员工信息登记表 浏览:377
高中美术pdf 浏览:161
java实现排列 浏览:513
javavector的用法 浏览:982
osi实现加密的三层 浏览:233
大众宝来原厂中控如何安装app 浏览:916
linux内核根文件系统 浏览:243
3d的命令面板不见了 浏览:526
武汉理工大学服务器ip地址 浏览:149
亚马逊云服务器登录 浏览:525
安卓手机如何进行文件处理 浏览:71
mysql执行系统命令 浏览:930
php支持curlhttps 浏览:143
新预算法责任 浏览:444
服务器如何处理5万人同时在线 浏览:251
哈夫曼编码数据压缩 浏览:428
锁定服务器是什么意思 浏览:385
场景检测算法 浏览:617
解压手机软件触屏 浏览:352