女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于OpenSBI的linux nommu實(shí)現(xiàn)

先楫半導(dǎo)體HPMicro ? 2025-02-08 13:43 ? 次閱讀

Linux內(nèi)核6.10提供了對(duì)沒(méi)有mmu的riscv處理器工作在S模式下的內(nèi)核的支持,本文介紹基于OpenSBI的linux no mmu的實(shí)現(xiàn),供大家參考。

1、OpenSBI介紹

SBI:Supervisor Software Binary Interface 軟件二進(jìn)制接口

a3e51140-e5df-11ef-9434-92fbcf53809c.png

Linux內(nèi)核工作在S模式下時(shí),不能直接訪問(wèn)機(jī)器定時(shí)器。而系統(tǒng)的運(yùn)行依賴于定時(shí)器,為了解決這個(gè)問(wèn)題,需要通過(guò)SBI接口由工作在M模式下的SBI固件來(lái)提供訪問(wèn)定時(shí)器等功能。

a40a7de0-e5df-11ef-9434-92fbcf53809c.png

SBI的實(shí)現(xiàn)方式有很多種,常見(jiàn)的包括BBL、OpenSBI、Xvisor、KVM、RustSBI、Diosix、Coffer。

文章將要介紹的OpenSBI應(yīng)用實(shí)例采用了FW_JUMP方式的OpenSBI方案。

FW_JUMP類型的固件假設(shè)下一個(gè)引導(dǎo)階段入口的地址是固定的,例如引導(dǎo)加載程序或操作系統(tǒng)內(nèi)核,而不直接包含下一個(gè)階段的二進(jìn)制代碼。

2、內(nèi)核配置

在內(nèi)核配置上,主要涉及到以下選項(xiàng),也可以通過(guò)倉(cāng)庫(kù)中的hpmicro_hpm6800evk_defconfig來(lái)獲取默認(rèn)的配置。

a4459934-e5df-11ef-9434-92fbcf53809c.png

倉(cāng)庫(kù)中還提供了基礎(chǔ)的GPIO和PINMUX驅(qū)動(dòng),愛(ài)好者們可以通過(guò)修改設(shè)備樹(shù)來(lái)實(shí)現(xiàn)LED和按鍵功能,而不用修改內(nèi)核驅(qū)動(dòng)代碼。對(duì)于其他的外設(shè)的PINMUX配置,也可以通過(guò)修改設(shè)備樹(shù)來(lái)完成。

3、Loader配置

由于HPM芯片啟動(dòng)時(shí)一般是以XIP的方式執(zhí)行flash中的代碼,所以需要一個(gè)loader程序來(lái)實(shí)現(xiàn)將OpenSBI、kernel、設(shè)備樹(shù)等固件拷貝到其運(yùn)行地址中。

a4763012-e5df-11ef-9434-92fbcf53809c.png

除了搬移固件外,loader還需要做一些基礎(chǔ)的初始化工作,包括sdram/ddr的使能,默認(rèn)console的時(shí)鐘和串口的pinmux配置等。

做完這些工作后,loader跳轉(zhuǎn)至OpenSBI的入口函數(shù),將系統(tǒng)交給OpenSBI來(lái)管理,接著OpenSBI在做完準(zhǔn)備工作后,跳轉(zhuǎn)至內(nèi)核。

4、BuildRoot配置

單獨(dú)編譯loader、OpenSBI、Linux內(nèi)核和文件系統(tǒng)并進(jìn)行燒寫(xiě)是可行的,但是不是那么的方便,使用BuildRoot,我們可以方便的將這些固件整合到一起,一次性編譯出整個(gè)固件。

4.1loader的添加

首先將編寫(xiě)好loader固件上傳到git服務(wù)器上。然后在buildroot的boot目錄下創(chuàng)建一個(gè)文件夾hpmicro_loader,在其中添加兩個(gè)新文件:Config.in和hpmicro_loader.mk

Config.in中主要是創(chuàng)建了一個(gè)Kconfig選項(xiàng),用來(lái)選擇是否要使能hpmicro_loader。使能后hpmicro_loader.mk會(huì)被加入到編譯系統(tǒng)中。

在本文的實(shí)現(xiàn)中,loader是基于hpm_sdk進(jìn)行編寫(xiě)的,其中將hpm_sdk作為submodule引入,所以在hpmicro_loader.mk中,不僅要將loader的倉(cāng)庫(kù)地址填入,還需要指定HPMICRO_LOADER_GIT_SUBMODULES = yes來(lái)讓編譯系統(tǒng)去初始化submodule,否則會(huì)缺失hpm_sdk文件。同時(shí)由于hpm_sdk是基于cmake構(gòu)建系統(tǒng)的,還需要指定hpmciro_loader的構(gòu)建系統(tǒng)為cmake:$(eval $(cmake-package))。由于hpm_sdk不支持源文件目錄下直接編譯,所以要指定HPMICRO_LOADER_SUPPORTS_IN_SOURCE_BUILD = no。再指定一些SDK編譯需要的環(huán)境變量后,就可以順利進(jìn)行編譯了。

編譯結(jié)束后,通過(guò)后處理命令,將編譯輸出的bin文件,拷貝到genimage的工作目錄,用于最終的鏡像生成。

define HPMICRO_LOADER_INSTALL_TARGET_CMDS
dd if=/dev/zero of=$(@D)/buildroot-build/output/temp.bin bs=1 count=1024
cat $(@D)/buildroot-build/output/temp.bin $(@D)/buildroot-build/output/demo.bin > $(@D)/buildroot-build/output/opensbiloader.bin
$(INSTALL) -D -m 0644 $(@D)/buildroot-build/output/opensbiloader.bin $(BINARIES_DIR)/opensbiloader.bin
endef

4.2 Kernel版本的指定

Kernel的自定義版本指定功能是BuildRoot自帶的,我們可以通過(guò)修改以下兩個(gè)選項(xiàng)來(lái)指定Kernel的版本。


· 指定Kernel版本

BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,hpmicro,linux,7b088c87b6758e413bd316bf883438f7134f1e7f)/linux-7b088c87b6758e413bd316bf883438f7134f1e7f.tar.gz"

其中g(shù)ithub,hpmicro,linux代表了倉(cāng)庫(kù)地址為github/hpmicro/linux.git,后邊的7b088c87b6758e413bd316bf883438f7134f1e7f為指定的提交編號(hào)

也可以通過(guò)menuconfig在圖形界面中去修改。

·指定Kernel的配置文件

BR2_LINUX_KERNEL_DEFCONFIG="nommu_hpmicro"

· 指定設(shè)備樹(shù)文件

BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_INTREE_DTS_NAME="hpmicro/hpm6800-evk"


4.3 OpenSBI版本的指定

OpenSBI的版本指定和Kernel的版本指定類似

BR2_TARGET_OPENSBI_CUSTOM_REPO_URL="https://github.com/hpmicro/opensbi.git"
BR2_TARGET_OPENSBI_CUSTOM_REPO_VERSION="2900da09af75c80ed8c4a8553a35e94e0f3f5c0d"
BR2_TARGET_OPENSBI_VERSION="2900da09af75c80ed8c4a8553a35e94e0f3f5c0d"

· 指定OpenSBI的平臺(tái)名稱:

BR2_TARGET_OPENSBI_PLAT="hpmicro"

4.4 鏡像排布的指定

采用genimage對(duì)各個(gè)獨(dú)立的鏡像進(jìn)行整合:創(chuàng)建genimage腳本文件genimage_opensbi.cfg, 指定每個(gè)鏡像文件存放的位置:

flash w25q128 {
pebsize = 64K
numpebs = 256
minimum-io-unit-size = 1
}
image flash.img {
flash {
}
flashtype = "w25q128"
partition opensbiloader {
size = 64k
image = "opensbiloader.bin"
}
partition opensbi {
offset = 64K
image = "fw_jump.bin"
size = 192K
}

partition kernel {
image = "Image"
offset = 256K
size = 2880K
}
partition dtb {
image = "hpm6800-evk.dtb"
offset = 3136K
size = 64K
}
partition rootfs {
image = "rootfs.squashfs"
offset = 4M
size = 1M
}
}

5、編譯過(guò)程

5.1 OpenSBI單獨(dú)編譯:

· Github倉(cāng)庫(kù)地址

https://github.com/hpmicro/opensbi.git

· 編譯命令

make all PLATFORM=hpmicro CROSS_COMPILE=riscv32-unknown-elf- HPMSOC=HPM6800 O={build_dir}

編譯完成后可以在{build_dir}中找到platform/hpmicro/firmware/fw_jump.bin,需要loader將其拷貝到地址0然后再跳轉(zhuǎn)到地址0來(lái)運(yùn)行。

5.2 Loader參考:

· Github倉(cāng)庫(kù)地址

https://github.com/hpmicro/hpm_opensbi_loader.git

· 編譯命令

HPM_SDK_BASE={SDKBASE} GNURISCV_TOOLCHAIN_PATH={RISCV TOOLCHAIN PATH} HPM_SDK_TOOLCHAIN_VARIANT=gcc cmake -GNinja -DBOARD=hpm6800evk -DHPM_BUILD_TYPE=flash_xip -B build

5.3 buildroot工程編譯:

· Github倉(cāng)庫(kù)地址

https://github.com/hpmicro/buildroot.git

· 編譯命令

make hpmicro_hpm6800evk_defconfig
make all

6、燒錄和運(yùn)行

· 燒錄需要用到hpm_manufacturing_tool,倉(cāng)庫(kù)地址:

https://github.com/hpmicro/hpm_manufacturing_tool.git

將buildroot生成的鏡像output/images/flash.img重命名成flash.bin燒錄到0x80000000即可。

OpenSBI v0.6
____ _____ ____ _____
/ __ \ / ____| _ \_ _|
| | | |_ __ ___ _ __ | (___ | |_) || |
| | | | '_ \ / _ \ '_ \ \___ \| _ < | |
| |__| | |_) | __/ | | |____) | |_) || |_
\____/| .__/ \___|_| |_|_____/|____/_____|
| |
|_|

Platform Name : HPMicro D45
Platform HART Features : RV32ACDFIMSUX
Platform Max HARTs : 1
Current Hart : 0
Firmware Base : 0x0
Firmware Size : 76 KB
Runtime SBI Version : 0.2

MIDELEG : 0x00000222
MEDELEG : 0x0000b109
PMP0 : 0x00000000-0x0001ffff (A)
PMP1 : 0x01200000-0x0127ffff (A,R,W,X)
PMP2 : 0x40000000-0x41ffffff (A,R,W,X)
PMP3 : 0x80000000-0x9fffffff (A,R,X)
PMP4 : 0xe0000000-0xefffffff (A,R,W)
PMP5 : 0xf0000000-0xffffffff (A,R,W)
[ 0.000000] Linux version 6.10.0 (ubuntu@ubuntu-virtual-machine) (riscv32-buildroot-linux-uclibc-gcc.br_real (Buildroot -g71f87772fd) 13.3.0, GNU ld (GNU Binutils) 2.41) #1 Sat Sep 14 10:38:43 CST 2024
[ 0.000000] Machine model: HPMicro HPM6800 Evaluate Kit
[ 0.000000] SBI specification v0.2 detected
[ 0.000000] SBI implementation ID=0x1 Version=0x6
[ 0.000000] SBI TIME extension detected
[ 0.000000] SBI IPI extension detected
[ 0.000000] SBI RFENCE extension detected
[ 0.000000] earlycon: sbi0 at I/O port 0x0 (options '')
[ 0.000000] printk: legacy bootconsole [sbi0] enabled
[ 0.000000] printk: debug: ignoring loglevel setting.
[ 0.000000] Zone ranges:
[ 0.000000] Normal [mem 0x0000000040000000-0x0000000041ffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000040000000-0x0000000041ffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x0000000041ffffff]
[ 0.000000] riscv: base ISA extensions acdfim
[ 0.000000] riscv: ELF capabilities acdfim
[ 0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[ 0.000000] pcpu-alloc: [0] 0
[ 0.000000] Kernel command line: earlycon=sbi console=hvc0 ignore_loglevel rootwait root=/dev/mtdblock0
[ 0.000000] Dentry cache hash table entries: 4096 (order: 2, 16384 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 2048 (order: 1, 8192 bytes, linear)
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 8192
[ 0.000000] mem auto-init: stack:all(zero), heap alloc:off, heap free:off
[ 0.000000] Memory: 30248K/32768K available (1370K kernel code, 298K rwdata, 266K rodata, 97K init, 136K bss, 2520K reserved, 0K cma-reserved)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[ 0.000000] riscv-intc: 32 local interrupts mapped
[ 0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[ 0.000005] sched_clock: 64 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
[ 0.008230] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=96000)
[ 0.018469] pid_max: default: 4096 minimum: 301
[ 0.023214] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.030507] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.041674] devtmpfs: initialized
[ 0.048165] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 0.057969] pinctrl core: initialized pinctrl subsystem
[ 0.087311] cpu0: Ratio of byte access time to unaligned word access is 1.65, unaligned accesses are fast
[ 0.098916] platform soc: Fixed dependency cycle(s) with /soc/interrupt-controller@e4000000
[ 0.109020] platform soc: Fixed dependency cycle(s) with /soc/interrupt-controller@e4000000
[ 0.120899] clocksource: Switched to clocksource riscv_clocksource
[ 0.130851] workingset: timestamp_bits=30 max_order=13 bucket_order=0
[ 0.137423] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[ 0.155691] riscv-plic e4000000.interrupt-controller: mapped 76 interrupts with 1 handlers for 2 contexts.
[ 0.167985] hpmicro gpio f00d0000.gpio-controller: port0dx, ngpios32
[ 0.175826] hpmicro gpio f00d0000.gpio-controller: gpio irq_num 1, dev_namef00d0000.gpio-controller
[ 0.185459] hpmicro gpio f00d0000.gpio-controller: port1dx, ngpios32
[ 0.192568] hpmicro gpio f00d0000.gpio-controller: gpio irq_num 2, dev_namef00d0000.gpio-controller
[ 0.202134] hpmicro gpio f00d0000.gpio-controller: port2dx, ngpios32
[ 0.209294] hpmicro gpio f00d0000.gpio-controller: gpio irq_num 3, dev_namef00d0000.gpio-controller
[ 0.218797] hpmicro gpio f00d0000.gpio-controller: port3dx, ngpios32
[ 0.225921] hpmicro gpio f00d0000.gpio-controller: gpio irq_num 4, dev_namef00d0000.gpio-controller
[ 0.235458] hpmicro gpio f00d0000.gpio-controller: port4dx, ngpios32
[ 0.242579] hpmicro gpio f00d0000.gpio-controller: gpio irq_num 6, dev_namef00d0000.gpio-controller
[ 0.252514] hpmicro gpio f00d0000.gpio-controller: port5dx, ngpios32
[ 0.259651] hpmicro gpio f00d0000.gpio-controller: gpio irq_num 7, dev_namef00d0000.gpio-controller
[ 0.271904] printk: legacy console [hvc0] enabled
[ 0.271904] printk: legacy console [hvc0] enabled
[ 0.281387] printk: legacy bootconsole [sbi0] disabled
[ 0.281387] printk: legacy bootconsole [sbi0] disabled
[ 0.291843] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[ 0.304084] f0040000.uart0: ttyS0 at MMIO 0xf0040000 (irq = 8, base_baud = 1500000) is a 16550A
[ 0.313704] hpmicro-uart f0040000.uart0: hpm-uart probe success
[ 0.322184] hpmicro-uart f004c000.uart3: hpm-uart probe success
[ 0.328959] physmap-flash 80400000.rom: physmap platform flash device: [mem 0x80400000-0x80ffffff]
[ 0.340420] pinctrl-hpmicro f4040000.pinctrl: pin167 config set:
[ 0.346446] pinctrl-hpmicro f4040000.pinctrl: 5:1
[ 0.351353] pinctrl-hpmicro f4040000.pinctrl: 14:1
[ 0.356376] pinctrl-hpmicro f4040000.pinctrl: 128:3
[ 0.361505] pinctrl-hpmicro f4040000.pinctrl: 129:0
[ 0.367076] input: gpio-keys0 as /devices/platform/gpio-keys0/input/input0
[ 0.374457] evbug: Event. Dev: input0, Type: 1, Code: 304, Value: -1
[ 0.380747] evbug: Event. Dev: input0, Type: 0, Code: 0, Value: 0
[ 0.386999] evbug: Connected device: input0 (gpio-keys0 at gpio-keys-polled/input0)
[ 0.394686] evbug: Event. Dev: input0, Type: 1, Code: 304, Value: 0
[ 0.400939] evbug: Event. Dev: input0, Type: 0, Code: 0, Value: 0
[ 0.410306] ledtrig-cpu: registered to indicate activity on CPUs
[ 0.425354] pinctrl-hpmicro f4040000.pinctrl: pin166 config set:
[ 0.431358] pinctrl-hpmicro f4040000.pinctrl: 5:1
[ 0.436289] pinctrl-hpmicro f4040000.pinctrl: 14:1
[ 0.441351] pinctrl-hpmicro f4040000.pinctrl: 128:3
[ 0.446424] pinctrl-hpmicro f4040000.pinctrl: 129:0
[ 0.452175] input: gpio-keys1 as /devices/platform/gpio-keys1/input/input1
[ 0.459436] evbug: Connected device: input1 (gpio-keys1 at gpio-keys/input0)
[ 0.466928] clk: Disabling unused clocks
[ 0.471437] cramfs: checking physical address 0x80400000 for linear cramfs image
[ 0.480081] VFS: Mounted root (squashfs filesystem) readonly on device 31:0.
[ 0.487534] devtmpfs: mounted
[ 0.490877] Freeing unused kernel image (initmem) memory: 96K
[ 0.496618] This architecture does not have kernel memory protection.
[ 0.503115] Run /sbin/init as init process
[ 0.507258] with arguments:
[ 0.510291] /sbin/init
[ 0.513096] with environment:
[ 0.516231] HOME=/
[ 0.518701] TERM=linux
[ 1.553000] random: crng init done
mount: mounting devpts on /dev/pts failed: No such device
sh: can't execute 'seedrng': No such file or directory

Welcome to Buildroot
buildroot login:

當(dāng)按下開(kāi)發(fā)板上的按鍵時(shí),會(huì)有信息打印出來(lái):

[ 3.208963] evbug: Event. Dev: input0, Type: 1, Code: 304, Value: 1
[ 3.215174] evbug: Event. Dev: input0, Type: 0, Code: 0, Value: 0
[ 3.388948] evbug: Event. Dev: input0, Type: 1, Code: 304, Value: 0
[ 3.395153] evbug: Event. Dev: input0, Type: 0, Code: 0, Value: 0
[ 3.808915] evbug: Event. Dev: input1, Type: 1, Code: 305, Value: 1
[ 3.815120] evbug: Event. Dev: input1, Type: 0, Code: 0, Value: 0
[ 3.952914] evbug: Event. Dev: input1, Type: 1, Code: 305, Value: 0
[ 3.959119] evbug: Event. Dev: input1, Type: 0, Code: 0, Value: 0
[ 4.284913] evbug: Event. Dev: input1, Type: 1, Code: 305, Value: 1
[ 4.291118] evbug: Event. Dev: input1, Type: 0, Code: 0, Value: 0
[ 4.420915] evbug: Event. Dev: input1, Type: 1, Code: 305, Value: 0
[ 4.427115] evbug: Event. Dev: input1, Type: 0, Code: 0, Value: 0

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1408

    瀏覽量

    41084
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11456

    瀏覽量

    212750
  • MMU
    MMU
    +關(guān)注

    關(guān)注

    0

    文章

    92

    瀏覽量

    18634
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于嵌入式Linux的來(lái)電判決模塊的設(shè)計(jì)與實(shí)現(xiàn)

    基于嵌入式Linux 的來(lái)電判決模塊的設(shè)計(jì)與實(shí)現(xiàn)-Design and lmplementation of Calling Determination Module Ba ed on Embedded linux 摘要設(shè)計(jì)了一
    發(fā)表于 02-09 10:41 ?18次下載

    Linux下51匯編器的設(shè)計(jì)及實(shí)現(xiàn)

    介紹在Linux 下使用lex 和yacc 設(shè)計(jì)并實(shí)現(xiàn)一個(gè)51 匯編器的過(guò)程。包括具體設(shè)計(jì)實(shí)現(xiàn)的源碼和編譯、調(diào)試的方法。
    發(fā)表于 04-16 08:43 ?14次下載

    Linux 下51 匯編器的設(shè)計(jì)及實(shí)現(xiàn)

    介紹在Linux 下使用lex 和yacc 設(shè)計(jì)并實(shí)現(xiàn)一個(gè)51 匯編器的過(guò)程。包括具體設(shè)計(jì)實(shí)現(xiàn)的源碼和編譯、調(diào)試的方法。
    發(fā)表于 05-15 15:23 ?17次下載

    Linux下的網(wǎng)絡(luò)HOOK實(shí)現(xiàn)

    最近瘋狂的研究Linux的種種功能,也頗有心得,這里講述一下Linux下的Net的Hook,使用net的Hook可以實(shí)現(xiàn)很多很多非常底層的功能
    發(fā)表于 05-14 10:27 ?5236次閱讀

    ARM linux系統(tǒng)調(diào)用的實(shí)現(xiàn)原理

    大家都知道linux的應(yīng)用程序要想訪問(wèn)內(nèi)核必須使用系統(tǒng)調(diào)用從而實(shí)現(xiàn)從usr模式轉(zhuǎn)到svc模式。下面咱們看看它的實(shí)現(xiàn)過(guò)程。
    發(fā)表于 05-30 11:24 ?2274次閱讀

    基于Linux下的LCD驅(qū)動(dòng)程序實(shí)現(xiàn)

    基于Linux下的LCD驅(qū)動(dòng)程序實(shí)現(xiàn)
    發(fā)表于 10-30 16:45 ?12次下載
    基于<b class='flag-5'>Linux</b>下的LCD驅(qū)動(dòng)程序<b class='flag-5'>實(shí)現(xiàn)</b>

    opensbi下的riscv64裸機(jī)系列編程1(串口輸出)

    接口 6.程序運(yùn)行 7.printf函數(shù)的實(shí)現(xiàn) 8.小結(jié) 1.說(shuō)明 前面的文章中已經(jīng)提到了opensbi的作用不僅僅是一個(gè)引導(dǎo)作用,還提供了M模式轉(zhuǎn)換到S模式的實(shí)現(xiàn),同時(shí)在S-Mode下的內(nèi)核可以通過(guò)
    的頭像 發(fā)表于 12-31 10:56 ?9903次閱讀

    OpenSBI RISC-V開(kāi)源Supervisor二進(jìn)制接口

    opensbi.zip
    發(fā)表于 04-25 10:25 ?1次下載
    <b class='flag-5'>OpenSBI</b> RISC-V開(kāi)源Supervisor二進(jìn)制接口

    Linux的PWM驅(qū)動(dòng)框架及實(shí)現(xiàn)方法

    本文主要講述了Linux的PWM驅(qū)動(dòng)框架、實(shí)現(xiàn)方法、驅(qū)動(dòng)添加方法和調(diào)試方法。
    的頭像 發(fā)表于 05-14 15:24 ?1788次閱讀
    <b class='flag-5'>Linux</b>的PWM驅(qū)動(dòng)框架及<b class='flag-5'>實(shí)現(xiàn)</b>方法

    Linux內(nèi)存占用分析

    opensbi,因此應(yīng)該把opensbi放到地址0x0處,這樣芯片上電后,就會(huì)從0x0地址處執(zhí)行opensbi。在opensbi運(yùn)行完后,會(huì)跳轉(zhuǎn)到o
    的頭像 發(fā)表于 10-08 10:38 ?977次閱讀
    <b class='flag-5'>Linux</b>內(nèi)存占用分析

    OpenSBI固件類型介紹

    OpenSBI固件類型 在介紹OpenSBI固件類型前,我們需要知道一點(diǎn)RISC-V Linux的啟動(dòng)過(guò)程: 啟動(dòng)流程:ZSBL-->FSBL-->OpenSBI-->u-boot--
    的頭像 發(fā)表于 10-08 14:11 ?1016次閱讀
    <b class='flag-5'>OpenSBI</b>固件類型介紹

    OpenSBI支持哪些固件

    booting stage address */ unsigned long next_addr; /** Next booting stage mode */ unsigned long next_mode; /** Options for OpenSBI library */ unsig
    的頭像 發(fā)表于 10-08 14:15 ?753次閱讀

    RISC-V Linux運(yùn)行時(shí)OpenSBI配置和編譯

    配置和編譯 OpenSBI的配置選項(xiàng)位于不同平臺(tái)下的 config.mk 文件,例如 platform/generic/config.mk : # Blobs to build
    的頭像 發(fā)表于 10-08 14:24 ?1651次閱讀

    基于Linux的RFID交互系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)方案

    電子發(fā)燒友網(wǎng)站提供《基于Linux的RFID交互系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)方案.pdf》資料免費(fèi)下載
    發(fā)表于 10-23 10:32 ?0次下載
    基于<b class='flag-5'>Linux</b>的RFID交互系統(tǒng)的設(shè)計(jì)<b class='flag-5'>實(shí)現(xiàn)</b>方案

    開(kāi)發(fā)者分享 | 適用于HPM的RustSBI實(shí)現(xiàn)

    HPMicro的MCU一直以高性能著稱,之前也一直有想在HPM的MCU上運(yùn)行Linux的想法。直到看見(jiàn)Linux6.10中支持了RISC-V架構(gòu)在S-mode中運(yùn)行nommu內(nèi)核*,才下定決心開(kāi)始在HPM6360上折騰nommu
    的頭像 發(fā)表于 02-08 13:44 ?481次閱讀
    開(kāi)發(fā)者分享 | 適用于HPM的RustSBI<b class='flag-5'>實(shí)現(xiàn)</b>