Thông báo

Collapse
No announcement yet.

Hoạt động của vi xủ lý trên PC và một vi điều khiển

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Hoạt động của vi xủ lý trên PC và một vi điều khiển

    Chào mọi người
    Hôm nọ tự nhiên ngồi đọc lại về cơ chế boot của một máy tính, em có một vài thắc mắc mà tự mình thấy mơ hồ. Mong mọi người chỉ giáo, em sẽ tiếp thu trên tinh thần học hỏi:
    1. Một hệ thống gồm ROM, RAM , Flash và CPU thì em biết CODE sẽ lưu trên flash, chỉ có điều em thắc mắc là ngay khi bật nguồn lệnh đầu tiên được thực thi là nằm trên ROM hay Flash. Em tìm hiều thì các vi điều khiển có cái bootloader nhỏ nẳm trong ROM,vậy thì có phải vi điều khiển nào cũng có cái này và nó sẽ chạy đầu tiên không và nó chạy như thế nào. CODE trên Flash ( bộ nhớ lệnh ) sẽ được đọc trực tiếp vào CPU ( qua cache) hay sẽ phải nhờ bootloader load lên RAM rồi mới thực thi.
    2. PC không có kiểu bộ nhớ FLash như 1 vi điều khiển, chương trình cần chạy nằm trên ổ đĩa cứng thì nó được load lên ram và nạp lệnh vào CPU đúng không ạ.
    3.VD vi điều khiển CortexM3 thì khi nào cần dùng bootloader khi nào không

    Em xin cảm ơn

  • #2
    Nguyên văn bởi PhamHaMon Xem bài viết
    Chào mọi người
    Hôm nọ tự nhiên ngồi đọc lại về cơ chế boot của một máy tính, em có một vài thắc mắc mà tự mình thấy mơ hồ. Mong mọi người chỉ giáo, em sẽ tiếp thu trên tinh thần học hỏi:
    1. Một hệ thống gồm ROM, RAM , Flash và CPU thì em biết CODE sẽ lưu trên flash, chỉ có điều em thắc mắc là ngay khi bật nguồn lệnh đầu tiên được thực thi là nằm trên ROM hay Flash.
    Còn tùy thuộc xem hệ thống bạn mô tả là hệ thống nào, nói chung chung ko nói chính xác được. Thường thì chương trình trong ROM sẽ dùng để chạy 1 số khởi tạo ban đầu, do đó nó sẽ được chạy đầu tiên.

    Em tìm hiều thì các vi điều khiển có cái bootloader nhỏ nẳm trong ROM,vậy thì có phải vi điều khiển nào cũng có cái này và nó sẽ chạy đầu tiên không và nó chạy như thế nào. CODE trên Flash ( bộ nhớ lệnh ) sẽ được đọc trực tiếp vào CPU ( qua cache) hay sẽ phải nhờ bootloader load lên RAM rồi mới thực thi.
    Không phải VĐK nào cũng có booloader (bootloader có sẵn của nhà sản xuất), nếu bạn muốn, bạn có thể tự tạo bootloader cho VĐK, mục đích của bootloader là nhằm load 1 số chương trình đã để khởi tạo hệ thống, do vậy nó phải được khởi chạy đầu tiên.

    Đối với 1 số dòng vđk (Vd như Stellaris hoặc STM32 hoặc LPC) dùng bootloader để cho phép người dùng nạp chương trình từ PC (hoặc 1 cái gì đó tương tự như vậy) vào flash, nếu ko có yêu cầu nạp chương trình vào flash, bootloader sẽ nhảy vùng chứa firmware để thực thi.

    Đối với VĐK thì thường bootloader chỉ chạy 1 lần duy nhất, dùng cho 1 số mục đích, sau đó CPU sẽ chạy chương trình bạn viết trong flash, lúc này ko liên quan gì đến bootloader cả.

    2. PC không có kiểu bộ nhớ FLash như 1 vi điều khiển, chương trình cần chạy nằm trên ổ đĩa cứng thì nó được load lên ram và nạp lệnh vào CPU đúng không ạ.
    Chương trình (phần mềm) nằm trong ổ đĩa cứng ko load lên RAM, RAM chỉ dùng để chứa các thông số như dữ liệu tạm thời, biến chương trình... CPU đọc chương trình từ HDD và thực thi lệnh đã được biên dịch. Bạn nhớ lại khái niệm về kiến trúc Hardvard, sẽ thấy CPU giao tiếp đồng thời với Flash và RAM.

    3.VD vi điều khiển CortexM3 thì khi nào cần dùng bootloader khi nào không
    Khi khởi động (Power ON) thì bootloader luôn chạy, khi bạn cần nạp chương trình vào flash thì sẽ nạp thông qua bootloader, khi ko nạp chương trình vào flash thì sau khi khởi tạo xong, bootloader sẽ tự động nhảy đến vùng chứa firmware trong flash để chạy. Một số dòng VĐK như Stellaris thì cho phép bạn custom bootloader theo ý bạn. Bạn có thể tìm hiểu thêm về cơ chế khởi động của 1 số dòng VĐK có bootloader để biết thêm.

    Comment


    • #3
      Vâng, em hiểu rồi. Cảm ơn anh

      Comment


      • #4
        Em có tìm được thông tin về cơ chế boot của AT91SAM9260 như sau:
        - Tầng 1: Mã chương trình được thực thi ở ROM, thông qua các bước kiểm tra (được trình bày chi tiết dưới đây) CPU biết được file ảnh (boot image của tầng tiếp theo) nằm ở thiết bị nào, copy file ảnh vào SRAM (4kB), remap và thực hiện lệnh nhảy chương trình để thực thi tầng boot tiếp theo.

        - Tầng 2: Đây là chương trình do hãng ATMEL cung cấp (AT91BootStrap), mã chương trình được thực thi ở SRAM, bắt đầu ở địa chỉ 0x0 (sau khi remap). Nhiệm vụ của boot tầng 2 chép u-boot image vào SDRAM, thực hiện lệnh nhảy đến SDRAM để thực thi chương trình u-boot.

        - Tầng 3: u-boot được thiết kế cho việc boot Linux kernel (big project), dung lượng mã chương trình hơi lớn nên thông thường nó được thực thi ở bộ nhớ chính (SDRAM). u-boot cung cấp cho ta 1 tập hợp các phương thức boot Linux kernel thông qua: ethernet, usb, mmc, uart ...



        Như vậy là nó có chép chuơng trình (phần mềm ) lên RAM rồi mới nạp lệnh (IF) vào CPU .Anh giải thích rõ hơn cho em được không ạ.Tại sao nó không nạp lệnh luôn từ Flash

        Comment

        Về tác giả

        Collapse

        PhamHaMon Tìm hiểu thêm về PhamHaMon

        Bài viết mới nhất

        Collapse

        Đang tải...
        X