在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發燒友App

硬聲App

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

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

3天內不再提示
創作
電子發燒友網>電子資料下載>電子資料>使用Pico的硬件引導選擇開關

使用Pico的硬件引導選擇開關

2023-06-16 | zip | 0.00 MB | 次下載 | 免費

資料介紹

描述

在 Hackaday.io 上尋找項目時,我偶然發現了 Stephen Holdaway 的這個項目(點擊)。在這個項目中,他解決了每個雙啟動用戶面臨的一個令人沮喪的任務,即在我們想要切換到 Windows 的任何時候,等待從 GRUB 菜單中選擇 os (Windows)。他能夠添加一個硬件開關,以確定每次打開計算機時要啟動的操作系統

他通過將 STM32 微控制器配置為 USB 大容量存儲設備來實現這一點。他在hackaday 帖子(點擊)中記錄了他通過項目研究和實施的整個旅程。請閱讀他的帖子以更好地了解實現。

在這個項目中,我將展示如何將更改移植到 Raspberry Pi Pico。你可以在這個 GitHub Repo (點擊)中找到我的版本。

概念

GNU GRUB 是一個在加載任何操作系統之前運行的程序。通過這個菜單,我們可以選擇要加載的操作系統。GRUB 提供的模塊非常有限。這意味著它無法從通過 USB 連接的微控制器讀取數據。但它可以從存儲磁盤中讀取數據。

因此,我們可以通過將我們的微控制器枚舉為大容量存儲設備來欺騙 GRUB 從微控制器讀取數據。

因此,我們通過tinyUSB庫將我們的樹莓派 pico 枚舉為大容量存儲設備,該庫將具有文件switch.cfg文件,pico 將向其中寫入開關位置,即1 表示 ON 0 表示 OFF

我們必須在 GRUB 中添加一個腳本,它是讀取switch.cfg文件并將默認設置0(Ubuntu )/2(Windows) 的函數。

GRUB 在加載時運行我們的自定義腳本,然后通過其 UUID 標識符搜索我們的設備,如果退出則讀取switch.cfg文件。獲得開關位置后,它分別設置默認的操作系統選擇。

總之,

  • pico 會將自己配置為大容量存儲設備。
  • grub 菜單調用我們的腳本并詢問特定的文件。
  • Pico 通過在switch.cfg文件中添加開關位置來響應讀取請求。
  • grub 中的腳本從文件中提取信息并從提取的數據中設置默認選項。

將 Pico 配置為大容量存儲設備

我使用 tinyUSB 的cdc_msc示例來實現這一點。該示例將 pico 配置為大容量存儲設備,并創建 FAT12 文件系統并枚舉README.txt文件。

我將README.txt更改switch.cfg并將“set os_hw_switch=0\n”行添加到文件中。

#define SWITCH_CFG_CONTENTS \
"set os_hw_switch=0\n"

...
//------------- Block3: Readme Content -------------//
SWITCH_CFG_CONTENTS

現在我們已將 pico 配置為大容量存儲設備。將uf2文件復制到pico后,枚舉為存儲設備。我們將需要 GRUB 腳本的設備 UUID id,即UUID="0000-1234"。

$ sudo blkid
...
/dev/sda: SEC_TYPE="msdos" LABEL_FATBOOT="TinyUSB MSC" LABEL="TinyUSB MSC" UUID="0000-1234" BLOCK_SIZE="512" TYPE="vfat"

電路

poYBAGOIKrqASFJGAAAVOmGHIzE439.png
開關連接
?

?

pYYBAGOIOlOAQ1ZHAAoU_Ub3zR4889.jpg
?

讀取開關位置并寫入文件

現在我們需要讀取開關位置并相應地更改switch.cfg文件的內容,

  • 如果開關打開:設置 os_hw_switch=1\n
  • 如果開關關閉:設置 os_hw_switch=0\n

我使用 GPIO_PIN 28 作為開關引腳,設置為下拉。

read_switch_value返回開關位置,即“1”打開(拉高),“0”關閉(拉低)。

//-------------------------main.c---------------------
#define SWITCH_PIN 28

// read switch value 
uint8_t read_switch_value()
{
    return gpio_get(SWITCH_PIN) ? '1' : '0';
}

int main(void)
{
    gpio_init(SWITCH_PIN);

    //configure pin as INPUT
    gpio_set_dir(SWITCH_PIN, false); 

    //configure pin as PULL_DOWN
    gpio_set_pulls (SWITCH_PIN,false,true);

要將開關位置寫入switch.cfg ,我使用了調用read_switch_value函數的readGRUBConfig() ,并使用開關位置設置輸出緩沖區。

我發現在讀取第三個 block3 時lba設置為 3,因此攔截調用并調用readGrubConfig并傳遞將復制文件內容的緩沖區。

//-------------------------msc_disk.c---------------------

static char grubConfigStr[] = "set os_hw_switch=0\n";
static void readGrubConfig(uint8_t* output)
{
    // Modify config string with current switch value
    grubConfigStr[sizeof(grubConfigStr)-3] = read_switch_value();
    memcpy(output, &grubConfigStr, sizeof(grubConfigStr));
}

// Callback invoked when received READ10 command.
// Copy disk's data to buffer (up to bufsize) and return number of copied bytes.
int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize)
{
    (void) lun;
    // when reading the file
    if(lba == 3){
        readGrubConfig(buffer);
        return bufsize;
    }
    ...
    ...
}

編譯 Pico 代碼

我們需要將 pico stdlib添加到我們的代碼中以獲取gpio引腳訪問權限。

//-------------------------main.c-----------------------------------
#include 
#include 
#include 
#include "bsp/board.h"
#include "tusb.h"
...
#include "pico/stdlib.h"

制作項目:

$ mkdir build
$ cd build
$ cmake ..
$ make

配置 GRUB 以讀取文件內容

我在我的 Ubuntu 20.10 中添加了這些更改。

$ sudo vim /etc/grub.d/40_custom

....
# Look for hardware switch device by its hard-coded filesystem ID
search --no-floppy --fs-uuid --set hdswitch 0000-1234

# If found, read dynamic config file and select appropriate entry for each position
if [ "${hdswitch}" ] ; then
  source ($hdswitch)/switch.cfg

  if [ "${os_hw_switch}" == 0 ] ; then
    # Boot Linux
    set default="0"
  elif [ "${os_hw_switch}" == 1 ] ; then
    # Boot Windows
    set default="2"
  else
    # Fallback to default
    set default="${GRUB_DEFAULT}"
  fi

else
  set default="${GRUB_DEFAULT}"
fi

首先,我們搜索我們的文件系統。GRUB 有一個子命令search就是為了這個。

  • -no-floppy選項防止搜索軟盤設備
  • -fs--uuid 0000-1234搜索 UUID 為 0000-1234 的文件系統。

如果找到任何設備,則將找到的第一個設備設置為環境變量的值。

--set hdswitch hdswitch是我們的環境變量,如果找到,則使用磁盤名稱進行設置。

接下來,如果設置了hdswitch變量 ,我們將獲取 switch.cfg文件,這將創建另一個具有開關位置的環境變量,即 0/1。os_hw_switch

我們讀取 的值 os_hw_switch并將默認值分別設置為 0 或 2。0 因為 Ubuntu 在 GRUB 菜單中位于第 0 位,而 windows 位于第 2 位。

最后,如果 沒有設置hdswitch ,我們將默認設置為GRUB_DEFAULT。

現在我們需要更新我們的 grub:

$ sudo update-grub

我們完成了。

測試

poYBAGOIOnuAFjStAAoQsrAlGo8584.jpg
?

在連接設備的情況下重新啟動系統。

如果一切正常,打開按鈕將選擇 windows 或 ubuntu(如果關閉)。

pYYBAGOIOn2AZbgqAABpnnVPDEg185.jpg
當開關位置為 1 即 ON
?
pYYBAGOIOoCAGLslAABuKgmMA4w296.jpg
當開關位置為 0 即 OFF
?

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1美的電磁爐維修手冊大全
  2. 1.56 MB   |  5次下載  |  5 積分
  3. 2SMD LED選型手冊 貼片燈珠
  4. 5.47 MB   |  3次下載  |  免費
  5. 3基于PLC的拉絲機張力控制系統研究
  6. 0.14 MB   |  2次下載  |  5 積分
  7. 4LZC3106G高性能諧振控制器中文手冊
  8. 1.29 MB   |  1次下載  |  1 積分
  9. 5JL2233B集成電平轉換功能的LDO中文手冊
  10. 0.50 MB   |  1次下載  |  免費
  11. 6加密芯片的一種破解方法和對應加密方案改進設計
  12. 0.29 MB   |  1次下載  |  免費
  13. 7萬用表UT58A原理圖
  14. 0.09 MB   |  1次下載  |  5 積分
  15. 8BOSCH-REXROTH300擰緊系統常見故障及處理方法
  16. 0.06 MB   |  次下載  |  5 積分

本月

  1. 1使用單片機實現七人表決器的程序和仿真資料免費下載
  2. 2.96 MB   |  44次下載  |  免費
  3. 2UC3842/3/4/5電源管理芯片中文手冊
  4. 1.75 MB   |  19次下載  |  免費
  5. 3華瑞昇CR216芯片數字萬用表規格書附原理圖及校正流程方法
  6. 0.74 MB   |  14次下載  |  3 積分
  7. 4DMT0660數字萬用表產品說明書
  8. 0.70 MB   |  13次下載  |  免費
  9. 53314A函數發生器維修手冊
  10. 16.30 MB   |  13次下載  |  免費
  11. 6TPS54202H降壓轉換器評估模塊用戶指南
  12. 1.02MB   |  8次下載  |  免費
  13. 7STM32F101x8/STM32F101xB手冊
  14. 1.69 MB   |  8次下載  |  1 積分
  15. 8感應筆電路圖
  16. 0.06 MB   |  7次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935119次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420062次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233084次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191367次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183335次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81581次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73807次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65987次下載  |  10 積分
主站蜘蛛池模板: 欧美一级别| 中文在线三级中文字幕| 色资源窝窝全色| 好骚综合在线| 天天插天天舔| 国内精品视频免费观看| 天天色天天碰| 最新国产你懂的在线网址| 成人网中文字幕色| 一区二区三区精品视频| 白丝丝袜高跟国产在线视频| 色婷综合| 欧美一区二区视频在线观看| 天堂资源在线种子资源| 色丁香婷婷| 亚洲黄色小视频| 国产成人高清精品免费5388密| 中文字幕在线播放第一页| 五月激情五月婷婷| 亚洲爱爱网站| 亚洲狠狠婷婷综合久久久图片| 视频在线色| 天天狠狠色噜噜| 碰免费人人人视频| 国产视频一二三| 国产美女一区| 国模大尺度人体一区| 在线免费观看视频黄| 成人在线网| 成年女人毛片免费观看97| 亚洲精品久久久久午夜三| 夜夜嗷| 五月天婷婷色综合| 亚洲最大的成网4438| 女bbbbxxxx毛片视频0| 欧美777| 国产成人啪精品午夜在线播放| 久久久国产精品免费看| 精品一区二区三区视频| 天使色吧| 韩国三级视频在线观看|