RK3399学习-搭建交叉编译环境

之前的工作内容大多为调试各部分的硬件和系统的bug,真正编写代码的机会很少,或者说根本没有。

因此,想借着重新学习卫东山视频的机会,使用rk3399的板子来交叉编译驱动程序。

  1. 首先,要达到一个基本的目的,在ubuntu18.04的pc机上,编写出的程序可以在板子上跑的通。

         很简单,只要安装交叉编译工具链即可。

          sudo apt-get install gcc-5-aarch64-linux-gnu

          这样使用aarch64-linux-gnu-gcc hello.c,命令编译得到的a.out即可在开发板上运行。

       2.由于交叉编译,若一直使用filezilla来进行文件传输,有些多次一举,因此计划采用挂载pc机共享目录的方式进行

        转自下部链接:

        https://blog.csdn.net/u013000434/article/details/17048541

         首先得在宿主机上安装nfs服务器,并设置共享目录(以Ubuntu 12.04为例):

        1_1、sudo apt-get install nfs-kernel-server nfs-common   #安装nfs服务器#

        1_2、sudo vim /etc/exports   #打开exports,更改配置文件#

        1_3、在最后加入/home/steve/share *(rw,sync,no_root_squash)   #设置共享目录#

        1_4、sudo /etc/init.d/nfs-kernel-server restart   #重启nfs服务器#

        做完这四步,基本就完成了宿主机上nfs服务器的配置,你要是不放心的话,也可以在本地挂载,做个测试:

        1_5、sudo mount -t nfs -o nolock 192.168.0.XXX:/home/steve/share /mnt          

          # 其中,棕色为服务器ip地址,红色为共享的目录, 蓝色为本地的挂载目录 #

       开发板也需要安装nfs服务:

       sudo apt-get install nfs-common 

       至此,开发板已经可以访问PC机的目录了。

3、最根本的目的是,在pc机上编译驱动,可以直接在开发板上运行,而不必编译整个内核。

      由于rk3399的内核编译时,使用的是一个rockchip提供的sdk,经过测试,如果将其中的kernel单独拷贝出来,那么首先内核编译就不通过,所以后续的交叉编译就无法执行,因此,直接将Makefile中的内核路径,指定为sdk中的内核路径,编译模块成功,insmod成功,可以在/proc/devices路径下看到自己注册的字符设备。

Makefile采用了韦东山的文件:

KERN_DIR = /home/cwp/work/rockchip/linux/kernel

all:
    make -C $(KERN_DIR) M=`pwd` modules 

clean:
    make -C $(KERN_DIR) M=`pwd` modules clean
    rm -rf modules.order

obj-m    += first_drv.o

 

补充:

查看sdk中内核版本为4.4.179,于是从linux官网下载了该内核,使用sdk中的内核配置,当拷贝了sdk中的设备树后,直接按照sdk的编译方法编译设备树时,发下不通过,应该是瑞芯微做了一些修改,所以直接make,对提示的配置项直接回车默认。

结果编译出的ko模块时x86-64架构的,很明显,需要修改内核中的架构和编译器配置,发现如下两行并做出修改:

#ARCH           ?= $(SUBARCH)
#CROSS_COMPILE  ?= $(CONFIG_CROSS_COMPILE:"%"=%)
ARCH            ?= arm64
CROSS_COMPILE   ?= aarch64-linux-gnu-
 

编译出来的ko模块可以在开发板上insmod,至此,交叉编译环境的搭建完成,必每次都重新编译和烧写内核,也不必依赖于rockchip的sdk开发包。

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(RK3399学习-搭建交叉编译环境)