2011-07-01 23 views
12

Tôi đang xem một số gợi ý để hiểu cách nhân Linux thực hiện việc thiết lập các đồng hồ phần cứng khác nhau. Điều này về cơ bản liên quan đến việc làm việc với việc thiết lập các đồng hồ khác nhau mà các tính năng phần cứng như màn hình LCD, UART vv sẽ sử dụng. Ví dụ, khi Linux khởi động, nó xử lý việc thiết lập đồng hồ cho UART hoặc USB như thế nào. Có thể một cái gì đó giống như một người quản lý đồng hồ hoặc một cái gì đó.Triển khai tín hiệu đồng hồ phần cứng trong Linux Kernel

Tôi về cơ bản đang cố triển khai một cái gì đó tương tự cho một hệ điều hành khác trên một phần cứng mới mà tôi đang làm việc. Bất kỳ trợ giúp sẽ được thực sự đánh giá cao.

[Chỉnh sửa]
Cảm ơn bạn đã trả lời và liên kết. Vì vậy, đây là những gì tôi đã thực hiện cho đến bây giờ. Điều này sẽ cung cấp cho bạn một ý tưởng về nơi tôi đang đứng đầu.

Tôi tra cứu Sổ tay tham khảo phần cứng cho hệ thống cụ thể mà tôi đang nhắm mục tiêu và viết một số mã để theo dõi/sửa đổi tín hiệu/ghim của thiết bị ngoại vi mà tôi quan tâm, nghĩa là chuyển ON/OFF từ dòng lệnh. một bộ sưu tập của các đồng hồ/tín hiệu cùng nhau kiểm soát một HRM ngoại vi. Sẽ nói rằng nếu bạn muốn bật UART hoặc một cái gì đó sau đó bật tín hiệu như vậy và/pins. Và @BjoernD có Tôi đang sử dụng một cái gì đó giống như một mmap() chức năng để nói chuyện với các thiết bị ngoại vi.

Thịt của câu hỏi của tôi là tôi muốn hiểu thiết kế và triển khai Trình quản lý đồng hồ/ngoại vi sử dụng tiện ích mà tôi đã viết. Trình quản lý đồng hồ/ngoại vi này sẽ cho tôi quyền kiểm soát việc bật/tắt các thiết bị ngoại vi mà tôi muốn. Về cơ bản, Trình quản lý này sẽ cho phép tôi thực hiện các thay đổi trong mã init hiện đang chạy. Ngoài ra trong quá trình chạy thời gian có thể gọi Trình quản lý này để BẬT/TẮT các thiết bị sao cho mức tiêu thụ điện năng được tối ưu hóa. Nó có thể không có ý nghĩa hoàn hảo, nhưng bản thân tôi đang cố gắng quấn quanh đầu tôi.

Bây giờ tôi chắc chắn rằng một cái gì đó như thế này sẽ được triển khai trong Linux hoặc cho bất kỳ hệ điều hành nào về vấn đề hiệu suất (không ai muốn lãng phí năng lượng bằng cách bật tất cả thiết bị ngoại vi lúc khởi động). Tôi muốn hiểu Kiến trúc phần mềm của nó. Tham khảo từ bất kỳ hệ điều hành sẽ làm gì bây giờ để atleast có được một headstart. Ngoài ra tôi không viết hệ điều hành của riêng tôi, có một hệ điều hành tại chỗ nhưng Im tìm kiếm nhiều hơn ở một phần mềm cấp board aka BSP để làm việc trên. Nhưng cảm ơn cho các liên kết hệ điều hành anyways, họ thực sự tốt. Cảm kích điều đó.

Cảm ơn!

Trả lời

6

Điều bạn muốn đạt được rất cụ thể đối với a) nền tảng bạn đang sử dụng và b) thiết bị bạn muốn sử dụng. Ví dụ: trên x86 có 3 cách để giao tiếp với một thiết bị:

  1. Ngắt cho phép thiết bị báo hiệu CPU. Hệ điều hành này thường cung cấp các cơ chế để đăng ký các trình xử lý ngắt - các hàm được gọi khi xảy ra ngắt. Trong Linux, hãy xem request_irq() và bạn bè trong linux/include/interrupt.h
  2. I/O được ánh xạ bộ nhớ là bộ nhớ vật lý của thiết bị mà BIOS của nền tảng có sẵn giống như cách bạn truy cập bộ nhớ vật lý đơn giản - ghi vào địa chỉ bộ nhớ. Chính xác những gì đằng sau bộ nhớ như vậy (ví dụ: đăng ký cấu hình giao diện mạng hoặc bộ đệm khung hình LCD) phụ thuộc vào thiết bị và thường được chỉ định trong bảng dữ liệu của thiết bị.
  3. Cổng I/O được truy cập thông qua một không gian địa chỉ đặc biệt và hướng dẫn đặc biệt (INB/OUTB & đồng.). Khác hơn là họ làm việc tương tự như bộ nhớ I/O.

Có vô số cách để tìm hiểu xem thiết bị nào được chứng minh và nơi BIOS ánh xạ chúng.Một số nền tảng sử dụng các bảng ACPI (google cho thông số trang 1.000k), PCI cung cấp thông tin trên các thiết bị theo cách chuẩn hóa thông qua không gian cấu hình PCI, USB có cách tương tự để phát hiện thiết bị được gắn vào bus và một số thiết bị, ví dụ: UARTS , được chỉ định đơn giản để có sẵn ở phạm vi I/O được định cấu hình trước được cố định cho nền tảng của bạn.

Để bắt đầu hiểu Linux, tôi khuyên bạn nên "Understanding the Linux kernel". Để biết chi tiết cụ thể về cách Linux xử lý các thiết bị và những gì ở đó để viết trình điều khiển, hãy xem Linux Device Drivers. Hơn nữa, bạn sẽ cần phải có một cái nhìn đặc thù của nền tảng của bạn và thiết bị bạn muốn lái xe.

Nếu bạn muốn bắt đầu một hệ điều hành riêng, UART chắc chắn là một thứ hữu ích để in đầu ra gỡ lỗi, vì vậy bạn có thể muốn thực hiện điều này trước.

Bây giờ tôi đã viết ra tất cả điều này, có vẻ như câu hỏi thực tế của bạn là: Cách bắt đầu với thiết kế Hệ điều hành. Câu hỏi này sẽ rất có giá trị đối với bạn: What are some resources for getting started in operating system development?

+0

Vì vậy, những gì tôi đang về cơ bản cố gắng làm là có một số loại của hệ thống tại chỗ để tôi có thể bật các tín hiệu/đồng hồ yêu cầu cho h/w tương ứng. –

+0

Contd (Phím trả lại được cho là đã dán chú thích) Vì vậy, ví dụ trong khi khởi động có thể chỉ có UART có thể được bật nhưng phần còn lại có thể tắt để tiết kiệm power.Later khi LCD cần khởi động nó có thể gửi yêu cầu đến tiện ích/người quản lý trên các tín hiệu nhất định (chúng sẽ được biết đến từ thông số h/w). Tiện ích sẽ thực hiện hành động thích hợp bằng cách thiết lập các bit được yêu cầu trong thanh ghi điều khiển cho màn hình LCD "CAO". –

+0

Tôi chắc chắn rằng điều này đã được xử lý một cách có tổ chức trong hạt nhân Linux, nó chỉ là tôi không biết nơi để tìm. –

0

Hai người dùng lớn nhất trong hầu hết các máy tính là CPU và đĩa. Cả hai đều có khả năng tiết kiệm năng lượng trong Linux. Đồng hồ CPU có thể bị chậm lại khi hệ thống không bận, và động cơ đĩa có thể dừng lại khi không có I/O nào xảy ra. Đối với một UART, ngay cả khi bạn tiết kiệm tất cả sức mạnh mà nó sử dụng bằng cách tắt đồng hồ của nó, nó vẫn còn nhỏ so với những người khác bởi vì một UART không có nhiều logic trong đó.

Cách tốt nhất để tiết kiệm điện là 1) điện hiệu quả hơn nguồn cung 2) thay thế xoay đĩa với SSD 3) Làm chậm CPU và bộ nhớ xe buýt

+0

Và câu trả lời của bạn liên quan đến câu hỏi như thế nào? – BjoernD

+0

Steve - Tôi đánh giá cao việc bạn đề cập đến các cách tiết kiệm điện nhưng tôi đang xem xét nhiều cách để quản lý thiết bị ngoại vi của mình một cách hiệu quả để tiết kiệm điện như tôi đã nêu chi tiết trong câu hỏi của mình. Tôi biết rằng quy mô tần số CPU động là một lựa chọn tốt nhưng tôi không làm việc trên nó như của bây giờ. Và tôi không chỉ nói về UART, hơn là một người quản lý để xử lý tất cả các thiết bị ngoại vi bao gồm LCD, USB vv mà tôi cho rằng bạn đồng ý tiêu thụ rất nhiều năng lượng. –