当前位置: 首页 > news >正文

OrangePi Zero 3学习笔记(Android篇)10 - SPI和从设备

目录

1. 配置内核

2. 修改设备数

3. 修改权限

4. 验证


Zero 3的板子有2个SPI Master接口,其中SPI0接的是板载16MB大小的SPI Nor Flash,SPI1则是导出到26pin的接口上。

spi和i2c有点不同,spi是直接生成spi虚拟设备,所以在dev里面会直接出现类似spidev0.0这样的设备。Linux是通过MTD操作nor flash。可以在dev里面查看spidev设备,可以看到spidev0.0和spidev1.1两个spi设备。

1. 配置内核

执行命令:./longan/build.sh menuconfig

  • 进入

勾选

  • 进入

勾选

  • 进入

勾选

2. 修改设备数

修改文件/longan/device/config/chips/h618/configs/p2/linux-5.4/board.dts,找到spi1,在里面添加nor flash,注意去掉spi_board1,否则会提示spi1有冲突

    /*spi_board1@1 {device_type = "spi_board1";compatible = "rohm,dh2228fv";spi-max-frequency = <10000000>;reg = <0x1>;#spi-rx-bus-width = <0x1>;#spi-tx-bus-width = <0x1>;status = "okay";};*/spi1_flash1: w25c32@1 {compatible = "jedec,spi-nor";spi-max-frequency = <10000000>;reg = <1>;#address-cells = <1>;#size-cells = <1>;partition@spi-test0{label = "test0";reg = <0x0 0x400000>; /* 4MB */};};

3. 修改权限

在device/softwinner/apollo/common/system/ueventd.sun50iw9p1.rc中添加

/dev/mtd*                   0777    system      system

这种方式无效。

在/device/softwinner/apollo/common/system/init.sun50iw9p1.rc里面on fs里面添加

    mkdir -p /mnt/norflashmount -t jffs2 /dev/mtd0 /mnt/norflash

 这里mkdir会无法正常执行,通过dmesg | grep mount查看

[    5.120919] [  T190] type=1400 audit(10.276:4): avc: denied { mounton } for comm="init" path="/dev/mtd0" dev="tmpfs" ino=150 scontext=u:r:init:s0 tcontext=u:object_r:device:s0 tclass=chr_file permissive=1

分析这条权限提示:

a. 缺什么权限: denied { mounton },即缺mounton权限

b. 谁缺权限:scontext=u:r:init:s0,即init缺权限

c. 对什么缺少权限:tcontext=u:object_r:device:s0 ,即对device缺权限

d. 什么类型的文件:tclass=chr_file,即chr_file类型

找到/system/sepolicy/private/init.te,添加

allow init device:chr_file {getattrreadwriteioctl
};

编译提示错误

neverallow check failed at out/soong/.intermediates/system/sepolicy/userdebug_pl
at_sepolicy.cil/android_common/userdebug_plat_sepolicy.cil:7771 from system/sepo
licy/public/domain.te:465(neverallow domain device (chr_file (read write open)))

 没法mount

4. 验证

shell中输入cat /proc/mtd

console:/ $ cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00400000 00001000 "test0"

输入cat /proc/partitions,可以看到唯一的mtd分区

  31        0       4096 mtdblock0

相关文章:

  • 二程运输的干散货船路径优化
  • 2025年山东省数学建模F题思路
  • 精益数据分析(61/126):移情阶段评分体系构建与实战案例解析
  • MySQL 用户权限管理:从入门到精通
  • 2025年5月-信息系统项目管理师高级-软考高项-成本计算题
  • WebSocket:实时通信(如聊天应用)从零到一的深度解析
  • Cursor打开的文件中文乱码,应该怎么设置
  • 提高绳牵引并联连续体机器人运动学建模精度的基于Transformer的分段学习方法
  • Maven 插件参数注入与Mojo开发详解
  • Secs/Gem第七讲(基于secs4net项目的ChatGpt介绍)
  • 【物联网】基于树莓派的物联网开发【4】——WIFI+SSH远程登录树莓派
  • C 语言实战:使用二维数组进行学生成绩统计与分析
  • Kafka快速安装与使用
  • 【redis】redis常见数据结构及其底层,redis单线程读写效率高于多线程的理解,
  • 一物一码赋能智能制造:MES如何实现生产全流程数字化追溯
  • 《机场管理》第三版 目录
  • 如何备考雅思?
  • c++多态面试题之(析构函数与虚函数)
  • C++23 新特性:ranges::contains 与 ranges::contains_subrange
  • Linux 防火墙 firewalld 实战配置教程!
  • 刘晓庆被实名举报涉嫌偷税漏税,税务部门启动调查
  • 我的科学观|梅彦昌:科技创新关键在于能否跑得快,而不是有没有钱
  • 尊严的代价:新加坡福利体系下的价值困境
  • “犍陀罗艺术与亚洲文明”在浙大对外展出
  • 巴基斯坦总理:希望通过和平对话方式解决与印方问题
  • 上海市委常委会会议暨市生态文明建设领导小组会议研究基层减负、生态环保等事项