今天跟随 讯为的开发板实现了 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. C语言程序设计 | 动态内存管理:动态内存函数介绍,常见的动态内存错误,柔性数组
  2. 云数据中心选址PK:微软第一,IBM第二,谷歌最少
  3. python shape函数_Python中的多态及抽象类
  4. 基于Matlab的跨孔CT胖射线追踪算法(四)
  5. ARToolKit从图片生成特征点数据
  6. 集成电路的设计 —— 引脚
  7. editplus3注册码
  8. 安装配置MySQL5.7详细教程
  9. 猿创征文|从单机百万tpmc到分布式千万tpmc,GaussDB性能提升的3个关键技术剖析
  10. 44万条数据揭秘:如何成为网易云音乐评论区的网红段子手?
  11. Pycharm修改图片大小
  12. 使用matlab代码计算太阳高度角
  13. 人人都应该掌握的一些电脑操作技巧
  14. 阿里云服务器价格表,1核2G、2核4G、4核8G爆款配置收费标准
  15. 从0开始ubuntu16.04(虚拟机)安装tensorflow,spinningup
  16. Python画正方体
  17. 涂色问题 阿里编程机试题目
  18. 王爽 汇编语言 第二章 实验一
  19. 【深度学习框架输入格式】NCHW还是NHWC?
  20. Linux挂载proc文件夹,Linux中/etc/fstab /etc/mtab /proc/mounts这三个文件的分析与比较

热门文章

  1. 重庆市药政云课堂学习方法
  2. ubuntu14.04 samba 无法访问。您可能没有权限使用网络资源
  3. Unity Bakery使用说明(二)
  4. Lazada、速卖通、阿里国际、Shopee卖家店铺运营需要注意些什么?怎么做补单?
  5. 程序员界的九阳神功与独孤九剑
  6. 气场强的人都是怎么说话行事的?
  7. ClickHouse 异常问题记录
  8. cordova项目全过程
  9. strptime 将时间字符串转为 struct tm 格式
  10. 【微信小程序】从入门到放弃