欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

学习笔记:内核编译测试自己编写的驱动

程序员文章站 2024-03-08 10:50:16
...

总结外传

获取内核源码树(内核文件)

先确认内核包里的Makefile文件

  1. 主要是检查交叉编译工具链位置有没有设置对。CROSS_COMPILE ?= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
  2. 确认ARCH ?= arm。主要目的是为了编译时能找到arch/arm目录。

使用make x210ii_qt_defconfig 命令配置编译

  1. 最后只要出现:configuration written to .config这句话,就证明我们的操作是正确的。如果没有出现这句话,就有错误。
  • 注意:如果这一步配置没有得到.config文件,是不能进行到下一步的。实际测试时没有.config也可以make menuconfig,但是这样做出来的内核编译和烧写运行应该是有问题的。

使用make menuconfig 命令配置编译,使能nfs服务

  1. 可能出现的错误1:ncurses库没装
    错误信息:
 *** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 *** 
 *** Install ncurses (ncurses-devel) and try again.

解决方案: apt-get install libncurses5-dev(参考了:http://blog.csdn.net/yao_qinwei/article/details/8805101)

  1. 可能出现的错误2:屏幕太小
    错误信息:
Your display is too small to run Menuconfig!
It must be at least 19 lines by 80 columns.

解决方案:全屏,或者是把字体调小。

  1. 配置网络部分,主要是使能CONFIG_IP_PNP以在2中能够看到Root file system on NFS选项
Networking support 
	Networking options 
		TCP/IP networking
			IP: kernel level autoconfiguration
				[*] IP: DHCP support
				[*] IP: BOOTP support
				[*] IP: RARP support
  1. 配置开启nfs服务
File systems  --->	
	Network File Systems  --->
		<*> NFS client support 
		[*] NFS client support for NFS version 3    
		[*] NFS client support for the NFSv3 ACL protocol extension 
		[*] NFS client support for NFS version 4 (EXPERIMENTAL) 
		[*] NFS client support for NFSv4.1 (DEVELOPER ONLY)
		[*] Root file system on NFS  
  • 总结:make menuconfig是第二步配置,具体的用法和配置意义在后面课程讲。我们这里因为是九鼎已经移植过的,所以第二步配置是可以不做的,直接退出即可。
    用键盘的向右方向键移动到EXIT,按回车退出。

使用make 编译内核得到zImage

  1. 可能出现的错误1:莫名其妙的错误,可以试试先make distclean
  2. 代码本身的错误:具体问题具体分析,下面只是其中一种情况:
Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
/home/gec/Desktop/zhu_five/kernel/kernel/Makefile:138: recipe for target 'kernel/timeconst.h' failed
make[1]: *** [kernel/timeconst.h] Error 255
Makefile:883: recipe for target 'kernel' failed
make: *** [kernel] Error 2

解决方案:将kernel/timeconst.pl中第373行的defined()去掉只留下@val就可以正常编译了。

  1. 编译完成后得到的内核镜像不在源码树的根目录下,在arch/arm/boot这个目录下。得到的镜像名是zImage

虚拟机搭建tftp服务器(用于开发板下载内核,也可以直接用fastboot烧录)

  1. https://www.cnblogs.com/multimicro/p/9270547.html
  2. 把编译好的zImage 放到tftp服务器的目录下

虚拟机搭建nfs服务器(用来与开发板建立共享文件夹,方便传送编写的驱动.ko文件)

  1. https://www.cnblogs.com/multimicro/p/9269863.html

arm更改ip地址连接虚拟机 (set serverip xxx ,类似这样更改)

  1. https://blog.csdn.net/u011483998/article/details/95977471

  2. 连接tftp服务器在开发板uboot中设置set bootcmd 'tftp 0x30008000 zImage;bootm 0x30008000'

原本的是:set bootcmd 'movi read kernel 30008000;bootm 30008000

  1. 在uboot中挂载root(IP根据实际使用更改):setenv bootargs root=/dev/nfs nfsroot=192.168.1.141:/home/gec/Desktop/zhu_five/nfsroot ip=192.168.1.41:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200

原本的是 :setenv bootargs console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3

* 参数详解
	* 192.168.1.141  虚拟机ip
	* /home/gec/Desktop/zhu_five/nfsroot    nfs服务器目录
	* 192.168.1.10   开发板ip
	* 192.168.1.141  虚拟机ip
	* 192.168.1.1    网关
	* 255.255.255.0  子网掩码

修改Makefile中的KERN_DIR使其指向自己建立(开发板zImage)的内核源码树,然后虚拟机编译出来的驱动的对应内核。

将自己编译好的驱动.ko文件放入nfs共享目录下去

开发板启动后使用insmod、rmmod、lsmod等去进行模块实验

。。。。我最后没有成功挂载nfs,所以我就把Linux上编写的驱动.ko文件通过共享文件夹放到了主机上,然后使用tftp32这个软件传到开发板去insmod。

相关标签: 内核编译 驱动