今天跟随 讯为的开发板实现了 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相关推荐

  1. linux内核创建字符节点,Tiny6410学习ing—(四)、嵌入式Linux内核驱动进阶—(7)、高级字符设备驱动(自动创建节点)—#931...

    按照国嵌的视频教程上来说的,最后就是-自动创建设备文件! 其实我感觉以前完全可以直接是手动创建了设备文件,然后就可以直接讲述自动创建设备文件,为啥非要拖到最后来讲述,我也就不清楚了!! 不管了,写完收 ...

  2. 嵌入式linux设备驱动开发,嵌入式Linux设备驱动开发简介.pdf

    清远见--嵌入式培训专家 http :// "黑色经典"系列之<嵌入式Linux 应用程序开发详解> 11 章 嵌入式Linux 设备驱动开发 本章目标 本书从 6 章 ...

  3. 【正点原子MP157连载】第二十一章 嵌入式Linux LED驱动开发实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  4. 嵌入式linux学习步骤

    <一> 1.Linux 基础 安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linu ...

  5. 转——嵌入式Linux学习路线

    可能是年前跳槽的比较多,遇到不少同学咨询到嵌入式行业发展和职业规划的问题,这里总结一下嵌入式行业的机遇和选择,希望对读者们有所帮助. 我们暂且宏观上把程序员分为3类:业务类,专业类,系统类. 业务类 ...

  6. linux cached释放_正点原子Linux第四十一章嵌入式Linux LED驱动开发实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第四十一章嵌入式Linux LED驱动开发实验 上一章我 ...

  7. linux嵌入式如何学习,嵌入式Linux要如何学习?嵌入式linux学习路线讲解

    在学习嵌入式linux之前,一定要有C语言基础,而且是越熟练越好.对于汇编基础来说没有那么重要,当然对于C语言来说起码能够熟练写出一个数组排序.输入数字求和之类的程序代码.当然如果不熟悉的话就需要多写 ...

  8. 嵌入式linux学习路线参考(LINUX学习者必看经典)

    整理了嵌入式linux学习路线供参考,希望对您有所参考价值! 一.linux入门 目前嵌入式主要开发环境有 Linux.Wince等:Linux因其开源.开发操作便利而被广泛采用.而Linux操作系统 ...

  9. 【正点原子Linux连载】第四十一章 嵌入式Linux LED驱动开发实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

最新文章

  1. 字节跳动终于宣布取消大小周,字节员工却一片哀嚎!
  2. VS 2017显示“高级保存选项”命令操作方法
  3. 如何发布php网站_php网站如何发布【货币问答】- 联合货币
  4. MS17-010(永恒之蓝)漏洞分析与复现
  5. linux写聊天程序,轻易实现基于linux或win运行的聊天服务端程序
  6. 实践篇(1)--QPG之“打狗棍法”
  7. java 弹幕游戏_java弹幕小游戏1.0版本
  8. 计算机组成与设计 笔记(一)
  9. 2021年软件测试工具总结——接口测试工具
  10. 基于LASSO的波士顿房价分析
  11. C++解决八皇后问题
  12. 金庸笔下武功最强的十人
  13. 键盘录入(身高和体重)
  14. 小米平板4 android版本,小米平板4/4Plus通刷-LOS-安卓9.0.0-稳定版Stable2.0-来去电归属-农历等-本地化增强适配...
  15. MySQL使用存储过程批量插入百(千)万测试数据
  16. matlab舍选法编程,利用舍选抽样法生成随机数.pdf
  17. 洛谷 P3978 [TJOI2015]概率论
  18. python 解决 0-1 二维背包问题
  19. 看庭前花开花落,荣辱不惊,望天上…
  20. VirtualBox如何添加ISO文件或物理光盘

热门文章

  1. python爬取豆瓣TOP250电影
  2. 快递查询 快递查询.htm?dh=快递单号
  3. 14、Transformer--VIT TNT BETR
  4. Google vs. 百度:用百度真比Google多吗?
  5. 细数google和百度
  6. 参加了微软的千人机器人足球比赛!
  7. 高铁数字化的号角吹响了
  8. ram和flash的区别, SSD寿命, SSD和HHD速度比较, SSD和RAM速度比较
  9. C++字符界面——反弹球
  10. 关于“兴趣爱好”之我见