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

電子發燒友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山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 久久精品视频在线看15| 青青草原成人| 午夜DJ国产精华日本无码| 各种肉黄浪荡故事集| 无码观看AAAAAAAA片| 国产亚洲va在线电影| 永久免费在线看mv| 欧美亚洲精品午夜福利AV| 国产精品久久久久久人妻精品流 | 俄罗斯搜索引擎Yandex推广入口| 少女free大陆| 精品无码乱码AV| 99热6精品视频6| 窝窝色资源站| 老师湿乎乎两半嫩| 国产精品JK白丝AV网站| 樱花草在线影视WWW日本动漫| 内射一区二区精品视频在线观看| 国产AV亚洲一区精午夜麻豆| 亚洲一卡二卡三卡四卡无卡麻豆| 暖暖在线观看播放视频| 国产精品免费一区二区区| 在线观看亚洲专区5555| 日韩娇小性hd| 久久精品亚洲牛牛影视| 公交车轮C关老师| 在线 亚洲 日韩 欧洲视频| 色偷偷91综合久久噜噜| 久久久久久亚洲精品影院| 国产360激情盗摄全集| 在线中文字幕视频| 无码欧美毛片一区二区三在线视频| 久久精品午夜一区二区福利 | 国产色精品久久人妻99蜜桃麻豆 | 成人免费视频在线观看| 亚洲一区高清| 天上人间影院久久国产| 蜜芽tv在线www| 狠狠色丁香婷婷久久综合五月| 朝鲜黄色录像| 3acg同人漫画禁图h|