博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习笔记:内核编译测试自己编写的驱动之环境搭建
阅读量:4299 次
发布时间:2019-05-27

本文共 2939 字,大约阅读时间需要 9 分钟。

总结外传

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

先确认内核包里的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(参考了:

  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' failedmake[1]: *** [kernel/timeconst.h] Error 255Makefile:883: recipe for target 'kernel' failedmake: *** [kernel] Error 2

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

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

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

  1. 把编译好的zImage 放到tftp服务器的目录下

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

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

  1. 连接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。

转载地址:http://mupws.baihongyu.com/

你可能感兴趣的文章
使用 JAX-RS 简化 REST 应用开发
查看>>
三分钟读懂TT猫分布式、微服务和集群之路
查看>>
图解 mysql-5.7.20 压缩版安装教程
查看>>
IDEA中怎么新建package包,只有directory选项
查看>>
django admin auth用户按创建时间排序
查看>>
django admin 增加查看权限
查看>>
django后台加载从15秒优化到1秒的过程小记
查看>>
Python将繁体文件批量重命名简体中文文件
查看>>
chrome不显示Django-suit左侧菜单栏
查看>>
Python区间库python-intervals
查看>>
django admin 登录用户名密码错误提示
查看>>
python3 AttributeError: 'function' object has no attribute 'func_name'
查看>>
解决ubuntu下修改my.cnf设置字符集导致mysql无法启动
查看>>
bad magic number in 'application': b'\x03\xf3\r\n': ImportError
查看>>
10分钟完成MySQL对emoji的支持
查看>>
MySQL创建用户与授权
查看>>
Linux rsync实现断点续传
查看>>
MySQL mysqldump数据导出详解
查看>>
django使用redis缓存,使用多个缓存
查看>>
Linux系统登录新建用户时,shell开头为$,不显示用户名和路径的解决办法
查看>>