1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

Lập trình nhúng - Làm thế nào để xây dựng một module kernel linux?

Thảo luận trong 'Khoa học máy tính' bắt đầu bởi thanhmai, 4 Tháng sáu 2011.

  1. thanhmai Member

    Số bài viết: 606
    Đã được thích: 5
    Điểm thành tích: 18
    Giới thiệu
    Hướng dẫn này sẽ trình bày cách tạo ,thêm và biên dịch một mã nguồn module linux kernel 2.6 mới. không giống như một số hệ thống cố định (chương trình độc quyền), có 2 khu vực trong hệ thống linux: kernel space và user space. Theo linux, chương trình của chúng ta (user space) không thể trực tiếp điểu khiển các thiết bị phần cứng như là usb, rs232, GPIO ports….vì vậy, chúng ta cần một chương trình trung gian, để giao tiếp với kernel bất cứ điều gì như là lệnh của chúng ta ( trong user space) để điều khiển phần cứng thiết bị, và chương trình trung gian đươc gọi là trình điều khiển (driver) hoặc là modules linux kernel

    Khái niệm
    Trước khi làm việc với module linux, chúng ta nên biết một số khái niệm cơ bản về hệ thống nhúng như địa chỉ vật lý,địa chỉ ảo,MMU…

    Địa chỉ vật lý
    Trong máy tính, một địa chỉ vật lý, cũng như địa chỉ thực hoặc là dịa chỉ nhị phân là địa chỉ bộ nhớ (ở dạng số nhị phân) trình bày trên mạch máy tính bus địa chỉ để cho phép truy cập dữ liệu vào một vùng lưu trữ bên ngoài của bộ nhớ chính.

    Địa chỉ virtual
    Bộ nhớ ảo là một hệ thống máy tính kỹ thuật mà cho phép một chương trình ứng dụng biết rằng nó có bộ nhớ làm việc liền kề nhau, trong khi thực ra nó có thể bị phân mảnh vật lí và thậm chí có thể vượt quá ổ đĩa lưu trữ. Hệ thống sử dụng kỹ thuật này làm cho các chương trình ứng dụng lớn dễ dàng hơn và dùng bộ nhớ vật lí thực (nghĩa là RAM) hiệu quả hơn các hệ thống không có bộ nhớ ảo.
    Bộ nhớ ảo không chỉ là “ dùng không gian ổ đĩa để mở rộng kích thước bộ nhớ vật lí”. Mở rộng bộ nhớ là hệ quả bình thường của việc sử dụng công nghệ bộ nhớ ảo, nhưng có thể là được làm bằng một cách thức khác như overlays hoặc chuyển đổi chương trình và dữ liệu hoàn toàn nằm ở đĩa trong khi chúng không hoạt động. định nghĩa của bộ nhớ ảo được dựa trên các tricking programs với suy nghĩ là chúng đang dùng một số lượng lớn các địa chỉ tiếp giáp.
    [IMG]
    MMU
    Một đơn vị quản lí bộ nhớ (MMU), thỉnh thoảng được gọi là đơn vị quản lí bộ nhớ paged (PMMU), là một thành phần phần cứng máy tính chịu trách nhiệm xử lí các truy cập đến bộ nhớ theo yêu cầu của đơn vị xử lí trung tâm (CPU). Chức năng của nó bao gồm bản dịch của địa chỉ ảo thành địa chỉ vật lí ( nghĩa là quản lí bộ nhớ ảo), bảo vệ bộ nhớ, kiểm soát bộ nhớ cache, phân chia bus, và trong kiến trúc máy tính đơn giản ( đặc biệt là các hệ thống 8-bit) , bank switching
    MMUs hiện nay thường chia không gian địa chỉ ảo ( phạm vi địa chỉ được dùng bởi bộ vi xử lí) vào các trang, mỗi trang có một kích thước “power of 2”,thường là vài kilobytes. Các n bit cuối của địa chỉ ( the offset within a page) là left unchanged. Các bit địa chỉ trên là số trang. MMU thường dịch số trang ảo thành số trang vật lí thông qua một bộ nhớ cache kết hợp được gọi là một Translation Lookaside Buffer (TLB). Khi TLB thiếu một bản dịch, một cơ chế chậm hơn liên quan đến cấu trúc dữ liệu hoặc hỗ trợ phần mềm được dùng. Dữ liệu được tìm thấy trong các cấu trúc dữ liệu đó thường được gọi là page table entries (PTEs), và chính các cấu trúc dữ liệu được gọi là một table. Số trang vật lí được kết hợp với trang offset tạo thành địa chỉ vật lí hoàn chỉnh.
    Một PTE hoặc entry TLB cũng có thể bao gồm thông tin về việc liệu trang đã được viết hay chưa ( dirty bit), khi nó được sử dụng lần cuối cùng (các bit truy cập, cho một lần gần đây nhất sử dụng thuật toán thay thế trang), loại quá trình (chế độ người dùng, chế độ giám sát) có thể đọc và viết, và nó phải được lưu trữ.
    Thỉnh thoảng, một entry TLB hoặc PTE cấm truy cập vào một trang ảo, có lẽ vì không có bộ nhớ vật lí truy cập ngẫu nhiên được phân bố đến trang ảo. trong trường hợp này, tín hiệu MMU bị lỗi khi tới CPU. Hệ điều hành (OS) sẽ xử lí tình hình, có lẽ bởi cố gắng tìm một spare frame của RAM và cài đặt một PTE mới để lập bản đồ cho địa chỉ ảo. nếu không còn RAM trống, có lẽ nó cần chọn một một trang, dùng một số thuật toán thay thế, và lưu nó vào ổ đĩa (điều này được gọi là “paging”). Với nhiều MMUs đó có thể là PTE thiếu hoặc entries TLB, trong trường hợp mà OS sẽ tạo một bản đồ mới miễn phí.
    Trong nhiều trường hợp, một “ page fault ” có thể chỉ ra một lỗi phần mềm. một lợi ích then chốt của một MMU là bộ nhớ bảo vệ: một hệ điều hành có thể dùng nó để bảo vệ chống lại các chương trình errant, bằng cách không cho phép truy cập vào bộ nhớ mà một chương trình đặc biệt không được phép truy cập. thông thường một hệ điều hành phân công từng chương trình riêng của không gian dịa chỉ ảo của nó.
    Một MMU cũng làm giảm các vấn đề vể phân mảnh ổ đĩa. Sau khi các khối của bộ nhớ đã được cấp phát và giải phóng, bộ nhớ trống có thể bị phân mảnh (không liên tục). với bộ nhớ ảo, một phạm vi tiếp giáp của các địa chỉ ảo có thể được ánh xạ tới vài khối không tiếp giáp nhau của bộ nhớ vật lí.

    [IMG]

Chia sẻ trang này