使用新的驱动程序模块交叉编译Linux Arm Kernel

时间:2014-01-21 18:35:37

标签: linux linux-kernel cross-compiling kernel-module

我正在尝试在我的arch linux arm机器上包含一个驱动程序。我尝试使用这些步骤来包含驱动程序模块,但是我的交叉编译内核没有加载驱动程序。

1) Include the driver I want to add by making it have < M > beside it's 
   name in make ARCH=arm menuconfig

2) run: make ARCH=arm CROSS_COMPILE=/home/z3/bin/arm-   (the path for my cross-compiling toolchain)

3) run: make ARCH=arm CROSS_COMPILE=/home/z3/bin/arm- modules

4) run: make ARCH=arm CROSS_COMPILE=/home/z3/bin/arm- install

5) run: make ARCH=arm CROSS_COMPILE=/home/z3/bin/arm- modules_install

6) copy my uImage from: arch/arm/boot 
   to my boot location: /tftpboot/

然后,当我的嵌入式linux arm试图加载内核uImage时,它会挂起: 编辑:将入口点地址更改为80008000,现在它挂起:

Filename '/tftpboot/uImage'.                                                    
Load address: 0x81800000                                                        
Loading: #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         #################################################################      
         ####################################                                   
done                                                                            

转移的字节数= 3174848(3071c0十六进制)

从传统图像引导内核81800000 ...

图片名称:2.6.35-ModifiedEntry
   图像类型:ARM Linux内核映像(未压缩)
   数据大小:3174784字节= 3 MiB
   载入地址:80008000
   入口点:80008000
   验证校验和......好的    加载内核映像... OK
好的

启动内核......

我是否错误地交叉编译我的内核?它无法加载uImage。我想要做的就是使用新包含的驱动程序(包含在make menuconfig的配置中)为linux arm机器交叉编译我的内核。我错过了任何额外的步骤吗?

1 个答案:

答案 0 :(得分:2)

你在内核构建过程中犯了两个错误。

1)在make menuconfig之前

您需要在源代码中退出.config文件。

你怎么能得到它

1)制作ARCH = arm board_defconfig

检查/ arch / arm / configs中的默认配置

例如make ARCH = arm versatile_defconfig

这会将default配置写入.config

2)如果你不知道你的默认配置,你可以在目标板文件系统中获取它。

它将在/proc/config.gz中复制到您的主机解压缩并复制为顶级源代码中的.config。 或者它可能出现在/boot/config.x.x.x

如果不按照上面的步骤制作ARCH = arm menuconfig,这将从/boot/config-x.x.x复制主机x86配置文件,这将是错误的配置文件

完成上述步骤后,下一步使ARCH = arm menuconfig启用您的驱动程序。

第二个错误是make ARCH=arm CROSS_COMPILE=/home/z3/bin/arm- modules_install

这将在x86主机的/ lib / modules中安装模块。

所以请按照下面的一个

make ARCH=arm CROSS_COMPILE=(path to arm) uImage modules

创建一个目录来安装动态可加载模块

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- modules_install INSTALL_MOD_PATH=<path to install modules>

然后您需要将模块复制到目标。

有关详细信息,请参阅此Just black screen after running Qemu