接《Firefly RK3308B 搭建环境,编译,生成固件并烧录》文章
在Ubuntu中编辑和编译生成hello_world.ko文件,运行在开发板上,熟悉交叉编译的流程,进一步熟悉RK3308B开发板的开发流程。
参考链接:
https://www.cnblogs.com/downey-blog/p/10500828.html
https://blog.csdn.net/jianwen_hi/article/details/53398141
https://blog.csdn.net/Wu996/article/details/120632573?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164197408616780261996312%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=164197408616780261996312&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-1-120632573.nonecase&utm_term=firefly+rk3308+%E7%82%B9%E4%BA%AELED&spm=1018.2226.3001.4450
(一)生成Makefile、Kconfig文件
1.配置Kconfig
在/home/sgw/prj/Firefly-RK3308/kernel/drivers目录下,新建一个test文件夹,进入test文件夹
$ mkdir test
$ cd test
在test文件夹下,创建并编辑Kconfig
$ touch Kconfig
$ gedit Kconfig
在Kconfig中添加内容
config TEST
bool "Test driver"
help
this is for test !!
这里定义了一个TEST的句柄,Kconfig可以通过这个句柄来控制Makefile中是否编译,”Test driver”是显示在终端的名称。
2.配置Makefile
在test文件夹下,创建Makefile
$ touch Makefile
$ gedit Kconfig
在Kconfig中添加内容
obj-m+=hello_world.o
all:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean
当CONFIG_选项名=y时,表示对应目录下的xxx.c将被编译进内核当CONFIG_选项名=m时对应目录下的xxx.c将被编译成模块
3.配置上层目录的Kconfig
首先回到/home/sgw/prj/Firefly-RK3308/kernel/drivers目录
$ cd ..
$ gedit Kconfig
在Kconfig中最后添加
source "drivers/test/Kconfig"
4.配置上层目录的Makefile
$ gedit Makefile
在Makefile中最后添加
obj-y += test/
5.配置menuconfig
首先回到/home/sgw/prj/Firefly-RK3308/kernel目录
$ cd ..
$ make menuconfig
在打开的Kernel Configuration界面中,选择Device Drivers,Enter后再选择Test driver,然后通过空格键选中,保存退出
6.make生成.ko文件
在/home/sgw/prj/Firefly-RK3308/kernel目录下
$ make
7.把.ko文件推进到开发板
首先去到/home/sgw/prj/Firefly-RK3308/kernel/drivers/test目录
$ adb push hello_world.ko mnt/
8.另开一个终端,进入开发板目录,并加载.ko文件
$ adb shell
$ cd mnt/
$ insmod hello_world.ko
9.查看.ko文件是否已加载,并且查看打印
$ lsmod
$ dmesg
10.卸载.ko文件
$ rmmod hello_world.ko