嵌入式linux学习-驱动(2) hello world 模块实现记录 基于RK3568
今天跟随 讯为的开发板实现了 hello world 的驱动,之前已经实现了很多次,这次还是重新实现了一次 本文是基于RK3568
1. 编迅为的内核
topeet@ubuntu:~/Linux/rk356x_linux$ ./build.sh kernel
processing option: kernel
============Start building kernel============
TARGET_ARCH =arm64
TARGET_KERNEL_CONFIG =rockchip_linux_defconfig
TARGET_KERNEL_DTS =rk3568-evb1-ddr4-v10-linux
TARGET_KERNEL_CONFIG_FRAGMENT =
==========================================HOSTCC scripts/basic/fixdepHOSTCC scripts/kconfig/conf.oYACC scripts/kconfig/zconf.tab.cLEX scripts/kconfig/zconf.lex.cHOSTCC scripts/kconfig/zconf.tab.oHOSTLD scripts/kconfig/conf
#
# configuration written to .config
xxx
... LD [M] drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/bcmdhd.oBuilding modules, stage 2.MODPOST 3 modulesCC drivers/net/wireless/marvell/mwifiex/mwifiex.mod.oCC drivers/net/wireless/marvell/mwifiex/mwifiex_sdio.mod.oCC drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/bcmdhd.mod.oLD [M] drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/bcmdhd.koLD [M] drivers/net/wireless/marvell/mwifiex/mwifiex.koLD [M] drivers/net/wireless/marvell/mwifiex/mwifiex_sdio.ko
found ./arch/arm64/boot/dts/rockchip/.rk3568-evb1-ddr4-v10-linux.dtb.dts.tmp
found ./arch/arm64/boot/dts/rockchip/.rk3568-evb1-ddr4-v10-linux.dtb.dts.tmp
found ./arch/arm64/boot/dts/rockchip/.rk3568-evb1-ddr4-v10-linux.dtb.dts.tmp
found ./arch/arm64/boot/dts/rockchip/.rk3568-evb1-ddr4-v10-linux.dtb.dts.tmp
found ./arch/arm64/boot/dts/rockchip/.rk3568-evb1-ddr4-v10-linux.dtb.dts.tmp
found ./arch/arm64/boot/dts/rockchip/.rk3568-evb1-ddr4-v10-linux.dtb.dts.tmp
found ./arch/arm64/boot/dts/rockchip/.rk3568-evb1-ddr4-v10-linux.dtb.dts.tmpImage: resource.img (with rk3568-evb1-ddr4-v10-linux.dtb logo.bmp logo_kernel.bmp) is readyImage: boot.img (with Image resource.img) is readyImage: zboot.img (with Image.lz4 resource.img) is ready
fdt {kernel {resource {FIT description: U-Boot FIT source file for arm
Created: Tue Dec 20 22:33:35 2022Image 0 (fdt)Description: unavailableCreated: Tue Dec 20 22:33:35 2022Type: Flat Device TreeCompression: uncompressedData Size: 137945 Bytes = 134.71 KiB = 0.13 MiBArchitecture: AArch64Load Address: 0xffffff00Hash algo: sha256Hash value: 9cd38b1dd5c8dff695ae9928a6f96cc7d35dc3fd712907989d96c31a5ebb1aafImage 1 (kernel)Description: unavailableCreated: Tue Dec 20 22:33:35 2022Type: Kernel ImageCompression: uncompressedData Size: 26578952 Bytes = 25956.01 KiB = 25.35 MiBArchitecture: AArch64OS: LinuxLoad Address: 0xffffff01Entry Point: 0xffffff01Hash algo: sha256Hash value: 86c70073ba22fb58d4121acf95e4f8a45772a3260da3686e07883adcc7c55a6dImage 2 (resource)Description: unavailableCreated: Tue Dec 20 22:33:35 2022Type: Multi-File ImageCompression: uncompressedData Size: 176128 Bytes = 172.00 KiB = 0.17 MiBHash algo: sha256Hash value: 0f60a9def334606c948d16f093c7340c2a4c1a7cae7ffc04ac0d2b663cc2f318Default Configuration: 'conf'Configuration 0 (conf)Description: unavailableKernel: kernelFDT: fdt
grep: exceeded PCRE's backtracking limit
grep: exceeded PCRE's backtracking limit
grep: exceeded PCRE's backtracking limit
grep: exceeded PCRE's backtracking limit
grep: exceeded PCRE's backtracking limit
grep: exceeded PCRE's backtracking limit
grep: exceeded PCRE's backtracking limit
grep: exceeded PCRE's backtracking limitPLEASE CHECK BOARD GPIO POWER DOMAIN CONFIGURATION !!!!!<<< ESPECIALLY Wi-Fi/Flash/Ethernet IO power domain >>> !!!!!Check Node [pmu_io_domains] in the file: /home/topeet/Linux/rk356x_linux/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10-linux.dts请再次确认板级的电源域配置!!!!!!<<< 特别是Wi-Fi,FLASH,以太网这几路IO电源的配置 >>> !!!!!检查内核文件 /home/topeet/Linux/rk356x_linux/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10-linux.dts 的节点 [pmu_io_domains]
Running build_kernel succeeded.
topeet@ubuntu:~/Linux/rk356x_linux$
内核编译层面 迅为基本已经都做好了 我这边使用的是迅为提供的虚拟机。
接下来按照文档说明的开始抄代码
第一个驱动如下 :
#include <linux/module.h>
#include <linux/init.h>static int __init hello_init(void)
{printk("init ... \n");return 0;
}static void hello_exit(void)
{printk("exit ... \n");
}module_init(hello_init);
module_exit(hello_exit);MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("jeason b");
MODULE_VERSION("1.0.0");
对应的makefile 如下:
obj-m += hello.o
KDIR:=/home/topeet/Linux/rk356x_linux/kernel
PWD?=$(shell pwd)
all:make -C $(KDIR) M=$(PWD) modules
clean:make -C $(KDIR) M=$(PWD) cleanrm -f *.ko *.o *.mod.o *.mod.c *.symvers *.order
2.模块安装测试
[root@RK356X:~]# modinfo hello.ko
-/bin/sh: modinfo: not found
[root@RK356X:~]# insmod hello.ko
[ 6478.328524] init ...
[root@RK356X:~]# rmmod hello.ko
[ 6482.710927] exit ...
[root@RK356X:~]#
在 rk3568 开发板的默认的系统里面没找到 modinfo的指令 在ubuntu上查看模块信息
topeet@ubuntu:~/drive/hello$ ls
hello.c hello.ko hello.mod.c hello.mod.o hello.o Makefile modules.order Module.symvers
topeet@ubuntu:~/drive/hello$
topeet@ubuntu:~/drive/hello$ modinfo hello.ko
filename: /home/topeet/drive/hello/hello.ko
version: 1.0.0
author: jeason b
license: GPL v2
srcversion: 8C25FFFAB4F34B01755F9C1
depends:
name: hello
vermagic: 4.19.232 SMP mod_unload aarch64
topeet@ubuntu:~/drive/hello$
topeet@ubuntu:~/drive/hello$ file hello.ko
hello.ko: ELF 64-bit LSB relocatable, ARM aarch64, version 1 (SYSV), BuildID[sha1]=9d25a5a92f3e27c8bc230f32ef6c54332b2d7a14, with debug_info, not stripped
嵌入式linux学习-驱动(2) hello world 模块实现记录 基于RK3568相关推荐
- linux内核创建字符节点,Tiny6410学习ing—(四)、嵌入式Linux内核驱动进阶—(7)、高级字符设备驱动(自动创建节点)—#931...
按照国嵌的视频教程上来说的,最后就是-自动创建设备文件! 其实我感觉以前完全可以直接是手动创建了设备文件,然后就可以直接讲述自动创建设备文件,为啥非要拖到最后来讲述,我也就不清楚了!! 不管了,写完收 ...
- 嵌入式linux设备驱动开发,嵌入式Linux设备驱动开发简介.pdf
清远见--嵌入式培训专家 http :// "黑色经典"系列之<嵌入式Linux 应用程序开发详解> 11 章 嵌入式Linux 设备驱动开发 本章目标 本书从 6 章 ...
- 【正点原子MP157连载】第二十一章 嵌入式Linux LED驱动开发实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- 嵌入式linux学习步骤
<一> 1.Linux 基础 安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linu ...
- 转——嵌入式Linux学习路线
可能是年前跳槽的比较多,遇到不少同学咨询到嵌入式行业发展和职业规划的问题,这里总结一下嵌入式行业的机遇和选择,希望对读者们有所帮助. 我们暂且宏观上把程序员分为3类:业务类,专业类,系统类. 业务类 ...
- linux cached释放_正点原子Linux第四十一章嵌入式Linux LED驱动开发实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第四十一章嵌入式Linux LED驱动开发实验 上一章我 ...
- linux嵌入式如何学习,嵌入式Linux要如何学习?嵌入式linux学习路线讲解
在学习嵌入式linux之前,一定要有C语言基础,而且是越熟练越好.对于汇编基础来说没有那么重要,当然对于C语言来说起码能够熟练写出一个数组排序.输入数字求和之类的程序代码.当然如果不熟悉的话就需要多写 ...
- 嵌入式linux学习路线参考(LINUX学习者必看经典)
整理了嵌入式linux学习路线供参考,希望对您有所参考价值! 一.linux入门 目前嵌入式主要开发环境有 Linux.Wince等:Linux因其开源.开发操作便利而被广泛采用.而Linux操作系统 ...
- 【正点原子Linux连载】第四十一章 嵌入式Linux LED驱动开发实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
最新文章
- 字节跳动终于宣布取消大小周,字节员工却一片哀嚎!
- VS 2017显示“高级保存选项”命令操作方法
- 如何发布php网站_php网站如何发布【货币问答】- 联合货币
- MS17-010(永恒之蓝)漏洞分析与复现
- linux写聊天程序,轻易实现基于linux或win运行的聊天服务端程序
- 实践篇(1)--QPG之“打狗棍法”
- java 弹幕游戏_java弹幕小游戏1.0版本
- 计算机组成与设计 笔记(一)
- 2021年软件测试工具总结——接口测试工具
- 基于LASSO的波士顿房价分析
- C++解决八皇后问题
- 金庸笔下武功最强的十人
- 键盘录入(身高和体重)
- 小米平板4 android版本,小米平板4/4Plus通刷-LOS-安卓9.0.0-稳定版Stable2.0-来去电归属-农历等-本地化增强适配...
- MySQL使用存储过程批量插入百(千)万测试数据
- matlab舍选法编程,利用舍选抽样法生成随机数.pdf
- 洛谷 P3978 [TJOI2015]概率论
- python 解决 0-1 二维背包问题
- 看庭前花开花落,荣辱不惊,望天上…
- VirtualBox如何添加ISO文件或物理光盘