色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux NOR開發指南

嵌入式Linux那些事 ? 來源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-03-06 09:55 ? 次閱讀

Linux NOR 開發指南

1 簡介

編寫目的

此文檔描述Sunxi NOR 模塊的使用方法,為相關人員調試提供指導

適用范圍

boot0: 適用于brandy-2.0

u-boot: 適用于u-boot-2018

kernel: 適用于linux-4.9/linux-5.4 內核

BSP 的開發人員、測試人員

2 模塊介紹

2.1 模塊功能介紹

Linux 中SPINOR 體系結構如下圖所示:

poYBAGQFR_SAdEauAABZARRWkR0112.png

SPI NOR Framework:這層主要是處理不同廠家的NOR 物理特色差異,初始化SPINOR的工作狀態,如工作線寬(1 線、2 線、4 線、8 線)、有效地址位(16M 以上的NOR 需要使用4 地址模式),為上層MTD 提供讀寫擦接口

對應代碼目錄:drivers/mtd/spi-nor/spi-nor.c

M25P80(generic SPI NOR controller driver):這層主要對SPI NOR Framework

層傳下來的數據封裝成msg,傳遞給SPI framework 層。

對應代碼目錄:drivers/mtd/devices/m25p80.c

SPI Framework:這層主要是將msg 加入ctl 的工作隊列中,啟動內核線程隊列,處理隊列

中的msg。

對應代碼目錄:drivers/spi/spi.c

SPI controller driver:這層初始化SPI 控制器頻率、時鐘模式、cs 有效電平、大小端等

配置,同時處理上層傳下來的msg,通過CPU/DMA 方式傳輸數據到FIFO,再傳輸給外設

SPINOR。

對應代碼目錄:drivers/spi/spi-sunxi.c

2.2 相關術語介紹

術語 解釋說明
Sunxi 指Allwinner 的一系列SOC 硬件平臺
SPI Serial Peripheral Interface,同步串行外設接口
NOR Flash NOR Flash 是一種非易失閃存技術,是Intel 在1988 年創建
MTD MTD(memory technology device 內存技術設備) 是用于訪問memory 設備(ROM、flash)的Linux 的子系統

2.3 模塊配置介紹

2.3.1 longan 的配置和打包

./build.sh config

All available platform:

0. android

1. linux

Choice [linux]: 1

... //配置根據需求選擇

All available flash: //flash類型,只區分nor和非nor方案,Android方案無此選項,默認非nor

0. default

1. nor

Choice [default]: 1

打包普通固件

#./build.sh clean

#./build.sh

#./build.sh pack

打包卡打印固件

#./build.sh clean

#./build.sh

#./build.sh pack_debug

在配置的過程中會把平臺目錄下的BoardConfig.mk 的信息拷貝到.buildconfig 中。

2.3.2 sys_config 配置

SPINOR 的boot0 啟動階段,部分參數是從boot0 頭部獲取的,而這些參數是我們在打包固件時,通過工具update_boot0 將sys_config.fex 中[spinor_para],更新到boot0 頭部的,sys_config.fex 的[spinor_para] 配置參數如下:

[spinor_para]

;readcmd =0x6b

;read_mode =4

;write_mode =4

;flash_size =16

;delay_cycle =1

;frequency =100000000

;erase_size =64

;lock_flag =0

;sample_delay =0

;sample_mode =2

spi_sclk = port:PC00<4><0><2>

spi_cs = port:PC01<4><1><2>

spi0_mosi = port:PC02<4><0><2>

spi0_miso = port:PC03<4><0><2>

spi0_wp = port:PC04<4><0><2>

spi0_hold = port:PC05<4><0><2>

其中:

readcmd:boot0 用于讀取數據的命令,不填默認用uboot 傳遞過來的readcmd

read_mode、write_mode:boot0 的工作線寬(1、2、4),不填默認更加readcmd 決

定線寬

flash_size:flash 的大小

delay_cycle:boot0 的采樣延時配置,大于60MHZ 配置為1,小于24MHZ 配置為2,

大于24MHZ 小于60HZ 配置為3

frequency:boot0 的SPI 工作頻率,不填使用默認值50M

erase_size:boot0 的擦除單位

lock_flag:鎖功能是否打開

sample_delay:boot0 的細調采樣的采樣延時,uboot、kernel 也會用到,默認不填等于

0xaaaaffff

sample_mode:boot0 的細調采樣的采樣模式,uboot、kernel 也會用到,默認不填等于

0xaaaaffff

spi_sclk、spi_cs、spi0_mosi、spi0_miso、spi0_wp 和spi0_hold 用于配置相應的GPIO。

2.3.3 UBOOT 配置

2.3.3.1 編譯和配置

#make clean

#make sun8iw19p1_nor_config ----啟動的uboot (#make sun8iw19p1_config----燒寫uboot)

#make -j32

2.3.3.2 Menuconfig 配置

#cd brandy/brandy-2.0/u-boot-2018

#make menuconfig

進入Device Drivers

Device Drivers ----> [*]SPI Suppport ----> [*]Sunxi flash support ---->

pYYBAGQFR_SAJPQwAAB6DLrEbws832.png

進入SPI Support

Device Drivers ----> [*]SPI Suppport ----> [*]Sunxi SPI driver

poYBAGQFR_WAKlpmAABDplKsBKw729.png

進入sunxi_flash_support

Device Drivers ----> [*]Sunxi flash support ----> [*]Support sunxi spinor devices

pYYBAGQFR_WAQvAXAAA7eGRi4l8540.png

2.3.4 KERNEL 配置

2.3.4.1 SPINOR-驅動配置

#cd kernel/liunx-4.9 #make ARCH=arm menuconfig

進入Device Drivers

Device Drivers ----> <*>Memory Technology Device (MTD) support ----> [*]SPI support ---->

pYYBAGQFR_aAfWDgAAB44oKIlMs513.png

進入Menory Technology Device(MTD) support

Device Drivers ----> <*>Memory Technology Device (MTD) support ----> <*>SUNXI partitioning support <*>Direct char device access to MTD devices <*>Caching block device access to MTD devices Self-contained MTD device drivers ----> SPI-NOR device support ---->

poYBAGQFR_eAFSZLAABtAhw5HUg252.png

進入Self-contained MTD device drivers(5.4 內核不需要選擇此項)

Device Drivers ----> <*>Memory Technology Device (MTD) support ----> Self-contained MTD device drivers ----> <*>Support most SPI Flash chips (AT16DF, M25P.....)

pYYBAGQFR_eAatGbAABPA6sY148898.png

2.3.4.2 cmdline 方式選擇

Boot opttions ---->

poYBAGQFR_iABJycAABUBYHZkCY778.png

進入Boot options

Boot opttions ----> Kernel command line type ---->

pYYBAGQFR_iAP7BFAABtT_HFxww019.png

進入kernel command line type

Boot opttions ----> Kernel command line type ----> (X)Use bootloade kernel arguments if available

poYBAGQFR_mARJpGAAAx85ssslE355.png

2.3.4.3 文件系統配置

進入File systems

File system ----> [*]Miscellaneous filesystems ---->

pYYBAGQFR_mAPBxLAABBVqHNBKg634.png

? 進入Miscellaneous filesystems ? Incluede support for ZLIB compressed file systems (NEW) ? Incluede support for LZ4 compressed file systems (NEW) ? Incluede support for LZO compressed file systems (NEW) ? Incluede support for XZ compressed file systems (NEW)

File system ----> [*]Miscellaneous filesystems ----> [*]Incluede support for XZ compressed file systems (NEW)(壓縮方式選擇如下)

poYBAGQFR_qADRTgAABYyQy1i-M766.png

以上的壓縮方式(ZLIB/LZ4/LZO/XZ)具體選擇哪一種需要根據longan/build/mkcmd.sh 中如下代碼使用的壓縮方式而定,如下代碼使用的是gzip 壓縮方式,則內核File systems 中配置需選擇LZO 壓縮方式,若使用的是xz, 則需選擇XZ 壓縮方式。

${ROOTFS} ${LICHEE_PLAT_OUT}/rootfs.squashfs -root-owned -no-progress -comp gzip -noappend

2.4 源碼目錄介紹

2.4.1 UBOOT 源碼目錄

u-boot-2018drivers ├──sunxi_flash ---sunxi_flash的初始化/退出/讀/寫/擦除等flash接口 ├─mmc ---mmc接口代碼 ├─nand ---nand接口代碼 ├─spinor ---spi nor接口代碼 ├─sunxi_flash.c ---sunxi_flash操作接口 └──其他 ├── spi --sunxi_spi的接口代碼 ├─sunxi_spi.c ---具體代碼的實現 ├──mtd ├─spi ├─sf_probe.c ---nand接口代碼 ├─spinor ---spi nor接口代碼 ├─sunxi_flash.c ---sunxi_flash

2.4.2 KERNEL 源碼目錄

longankernellinux-4.9drivers ├── mtd ├─spi-nor ├─spi-nor.c ---spi nor驅動代碼 └──其他 ├── spi --spi的接口代碼 └── makefile ---編譯文件 版

3 接口描述

3.1 驅動物理層接口

3.1.1 spi_nor_erase

static int spi_nor_erase(struct mtd_info *mtd, struct erase_info *instr)

description:mtd erase interface @mtd: MTD device structure @instr: erase operation descrition structure return:success return 0,fail return fail code**

3.1.2 spi_nor_read

static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)

description:mtd read interface @mtd:MTD device structure @from: offset to read from MTD device @len: data len @retlen: had read data len @buf: data buffer return:success return max_bitflips,fail return fail code**

3.1.3 spi_nor_write

static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf)

description:mtd write data interface @to: offset to MTD device @len: want write data len @retlen:return the writen len @buf: data buffer return: success return 0, fail return code fail

3.1.4 spi_nor_lock

static int spi_nor_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len) description:check block is badblock or not

@mtd:MTD device structure @ofs: offset the mtd device start (align to simu block size) @len:The length of the operating return: success return 0, fail return code fail

3.1.5 spi_nor_unlock

static int spi_nor_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len) description:check block is badblock or not

@mtd:MTD device structure @ofs: offset the mtd device start (align to simu block size) @len:The length of the operating return: success return 0, fail return code fail

3.1.6 spi_nor_is_locked

static int spi_nor_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len) description:check block is badblock or not

@mtd:MTD device structure @ofs: offset the mtd device start (align to simu block size) @len:The length of the operating return: Is lock return 1, else return 0

3.1.7 spi_nor_has_lock_erase

static int spi_nor_has_lock_erase(struct mtd_info *mtd, struct erase_info *instr)

description:mtd has lock erase interface,First unlock to operate space, after the completion of the flash lock up @mtd: MTD device structure @instr: erase operation descrition structure return:success return 0,fail return fail code

3.1.8 spi_nor_has_lock_write

static int spi_nor_has_lock_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf)

description:mtd has lock write data interface,First unlock to operate space, after the completion of the flash lock up @to: offset to MTD device @len: want write data len @retlen:return the writen len @buf: data buffer return: success return 0, fail return code fail

3.2 Uboot 應用接口

3.2.1 sunxi_flash_spinor_probe

static int sunxi_flash_spinor_probe(void)

description:SPINOR initialization,Set the storage type。 return:zero on success, else a negative error code.

3.2.2 sunxi_flash_spinor_init

static int sunxi_flash_spinor_init(int boot_mode, int res)

description:SPINOR initialization。 @boot_mode:Working mode @res:The default is 0 return:zero on success, else a negative error code.

3.2.3 sunxi_flash_spinor_exit

int sunxi_flash_spinor_exit(void)

description:Release registration is a resource for applications. return:zero on success, else a negative error code.

3.2.4 sunxi_flash_spinor_write

static int sunxi_flash_spinor_write(uint start_block, uint nblock, void *buffer)

description:mtd write data interface. @start_block:want write start sector @nblock:want write sectorcount @buffer:data buffer

return:zero on success, else a negative error code.

3.2.5 sunxi_flash_spinor_write

static int sunxi_flash_spinor_write(uint start_block, uint nblock, void *buffer)

description:mtd readdata interface. @start_block:want read start sector @nblock:want read sector count @buffer:data buffer return:zero on success, else a negative error code.

3.2.6 sunxi_flash_spinor_erase

static int sunxi_flash_spinor_erase(int erase, void *mbr_buffer)

description:erase boot || partition data. @erase:erase flag @buffer:The default is NULL return:zero on success, else a negative error code.

3.2.7 sunxi_flash_spinor_force_erase

int sunxi_flash_spinor_force_erase(void)

description:erase boot & partition data. return:zero on success, else a negative error code.

3.2.8 sunxi_flash_spinor_flush

int sunxi_flash_spinor_flush(void)

description:Flush physical cache data to flash.

return:zero on success, else a negative error code.

3.2.9 sunxi_flash_spinor_download_spl

static int sunxi_flash_spinor_download_spl(unsigned char *buf, int len, unsigned int ext)

description:write boot0. @buf:boot0 data buffer @len:boot0 data len @ext:storage type return:zero on success, else a negative error code.

3.2.10 sunxi_flash_spinor_download_toc

static int sunxi_flash_spinor_download_toc(unsigned char *buf, int len, unsigned int ext)

description:write uboot. @buf:uboot data buffer @len:uboot data len @ext:storage type return:zero on success, else a negative error code.

4 使用例子

4.1 uboot shell 使用

4.1.1 sunxi_flash

mem_addr:內存地址,0x40000000 之后可以隨便選取如:0x45000000,0x46000000 part_name:分區文件名,boot-resource、env、boot、rootfs size:可以省略,默認讀取整個分區文件

sunxi_flash read [size] 讀取flash 中的分區文件到內存中 例:使用sunxi_flash read 命令將boot 分區讀入到0x49000000 中,然后使用md 命令讀取 0x49000000 中的內容。

pYYBAGQFR_qAEBPqAAAvtmyqYbA230.png

驗證方法:

0x49000000 讀入前與讀入后數據有沒有發生變化

在out/pack_out 目錄下找到對應的分區文件,使用hexdump -Cv boot.fex -n 500 命 令輸出分區文件的數據,對比一致即讀入成功。

poYBAGQFR_uAIwXwAAAqRJEczBw944.png

sunxi_flash write [size] 將內存中的數據,寫入到分區中 例: 1)使用mm 命令修改內存內容

pYYBAGQFR_uAcUSyAAA1ppyDv8U903.png

2)使用sunxi_flash write 0x44000000 env 將內存中的數據寫入env 分區

poYBAGQFR_yAdq7bAAATn8XEi-M506.png

3)重新將env 分區讀入內存中,對比一致表示寫入成功

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2695

    瀏覽量

    47433
  • Linux
    +關注

    關注

    87

    文章

    11292

    瀏覽量

    209332
  • u-boot
    +關注

    關注

    0

    文章

    121

    瀏覽量

    38222
收藏 人收藏

    評論

    相關推薦

    EAC0945 linux開發指南

    EAC0945 linux開發指南
    發表于 09-28 12:40

    EAC0945 linux開發指南

    `EAC0945 linux開發指南`
    發表于 10-31 12:18

    Rockchip Linux SDK uboot logo開發指南

    arm嵌入式vs-rk3399 板卡uboot logo 開發指南概述:本文檔主要介紹 rockchip linux sdk uboot logo 顯示的相關功能、配置以及開發過程中的注意事項。適用于 rockhip
    發表于 10-09 08:12

    CPLD FPGA高級應用開發指南

    CPLD FPGA高級應用開發指南
    發表于 04-15 10:56 ?58次下載
    CPLD FPGA高級應用<b class='flag-5'>開發指南</b>

    Tiny6410 Linux開發指南詳解

    Tiny6410 Linux 開發指南
    發表于 07-08 17:12 ?210次下載
    Tiny6410 <b class='flag-5'>Linux</b><b class='flag-5'>開發指南</b>詳解

    A64開發板LCD開發指南

    A64開發板LCD開發指南,驅動開發指南
    發表于 06-21 17:02 ?0次下載

    彩光燈開發指南

    彩光燈開發指南
    發表于 12-29 20:15 ?0次下載

    取暖器-油汀開發指南

    取暖器-油汀開發指南
    發表于 12-25 00:15 ?0次下載

    Linux的平臺下Mini210S裸機程序開發指南

    Linux的平臺下Mini210S裸機程序開發指南
    發表于 10-29 10:52 ?59次下載
    <b class='flag-5'>Linux</b>的平臺下Mini210S裸機程序<b class='flag-5'>開發指南</b>

    Rockchip Linux SDK的開發指南的詳細資料說明

    本文檔的主要內容詳細介紹的是Rockchip Linux SDK的開發指南的詳細資料說明。
    發表于 01-10 17:17 ?74次下載
    Rockchip <b class='flag-5'>Linux</b> SDK的<b class='flag-5'>開發指南</b>的詳細資料說明

    迅為RK3399開發板嵌入式linux開發指南

    迅為RK3399開發板嵌入式linux開發指南迅為RK3399開發板發布《北京迅為嵌入式linux開發指
    發表于 11-01 16:58 ?77次下載
    迅為RK3399<b class='flag-5'>開發</b>板嵌入式<b class='flag-5'>linux</b><b class='flag-5'>開發指南</b>

    nRF52832開發指南-上冊

    nRF52832開發指南-上冊
    發表于 06-16 14:15 ?75次下載

    Tina_Linux_系統軟件開發指南

    Tina_Linux_系統軟件開發指南
    的頭像 發表于 03-02 15:25 ?1823次閱讀
    Tina_<b class='flag-5'>Linux</b>_系統軟件<b class='flag-5'>開發指南</b>

    Tina Linux配置開發指南

    Tina Linux配置開發指南
    的頭像 發表于 03-02 15:28 ?1.6w次閱讀
    Tina <b class='flag-5'>Linux</b>配置<b class='flag-5'>開發指南</b>

    【北京迅為】itop-龍芯2k1000開發指南Linux基礎入門vim 編輯器

    【北京迅為】itop-龍芯2k1000開發指南Linux基礎入門vim 編輯器
    的頭像 發表于 10-25 14:56 ?303次閱讀
    【北京迅為】itop-龍芯2k1000<b class='flag-5'>開發指南</b><b class='flag-5'>Linux</b>基礎入門vim 編輯器
    主站蜘蛛池模板: 九九热精品视频在线观看| 女子叉开腿让男子桶免费软件| aaaaaaa一级毛片| 最近日本免费观看MV免费| 污文乖不疼的| 午夜AV内射一区二区三区红桃视| 色爰情人网站| 无码国产精品高潮久久9| 添加一点爱与你电视剧免费观看| 人妻超级精品碰碰在线97视频| 免费国产成人高清在线观看视频| 免费看大黄高清网站视频在线| 麻豆成人AV久久无码精品| 久久国产精品久久国产精品| 国产人人为我我为人人澡| 国产精品久久久久激情影院| 国产精品高清免费网站| 国产在线精品亚洲观看不卡欧美| 久久 这里只精品 免费| 男人插曲视频大全免费网站| 日本工口生肉全彩大全| 亚洲精品国产专区91在线| 最新国产在线视频| 给个男人都懂的网址2019| 久久99re6热在线播放| 久久aa毛片免费播放嗯啊| 恋夜影院支持安卓视频美女| 快穿之诱受双性被灌满h| 欧美性狂猛bbbbbbxxxx| 色屁屁影院| 亚洲字幕久久| 被爽到叫呻呤视频免费视频| 国产精品成人免费视频99| 精品国产乱码久久久久久免费 | 亚洲精品无AMM毛片| 1区2区3区4区产品不卡码网站| 99re28久久热在线观看| 国产成人无码精品久久久按摩| 精品国产免费人成视频| 欧美日韩高清一区| 亚洲国产精品一区二区第一页|