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}

Các bước xây dựng hệ thống nhúng

Thảo luận trong 'Lập trình nhúng' bắt đầu bởi linhdong, 11 Tháng tư 2012.

  1. linhdong Member

    Số bài viết: 306
    Đã được thích: 6
    Điểm thành tích: 18
    Giới tính: Nam
    ( Sưu tầm bài viết này từ kamejoko80 )
    Phần này mình sẽ trình bày các bước (lấy từ kinh nghiệm thực tế) khi xây dựng hệ thống nhúng.

    Để xây dựng hệ thống embedded Linux, chúng ta phải trải qua nhiều công đoạn. Nếu đi đúng hướng thì chúng ta có thể rút ngắn nhiều thời gian. Công đoạn thiết kế chia ra thành 2 phần, bao gồm phần cứng và phần mềm. Nếu là cá nhân thì có thể làm tuần tự từ hardware đến software, nếu làm việc theo nhóm thì có thể đi song song. Một điều quan trọng đối với kỹ sư phần cứng là: thiết kế phải thỏa mãn mối tương quan giữa phần cứng và phần mềm. Có nghĩa là giữa hardware và software phải được đồng bộ trong quá trình thiết kế. Nếu kỹ sư phần cứng có thêm 1 chút kiến thức nhất định về phầm mềm thì công việc sẽ tiến triển thuận lợi hơn, và ngược lại, kỹ sư phần mềm biết chút ít về phần cứng thì việc viết các chương trình ứng dụng sẽ trở nên trôi chảy.
    CÁC BƯỚC XÂY DỰNG PHẦN CỨNG:
    1> Lựa chọn kiến trúc CPU:

    - Có rất nhiều kiến trúc CPU được support bởi Linux OS ví dụ như : ALPHA, ARM, SH, MIP, POWER PC... Tuy nhiên, chúng ta sẽ tập trung kiến trúc ARM vì nó nằm trong khuôn khổ của forum.
    2> Lựa chọn CPU vendor:
    - Sau khi lựa chọn cấu trúc CPU, ta sẽ lựa chọn sản phẩm CPU từ các nhà sản xuất chíp. Hiện nay trên thế giới có nhiều hãng khác nhau, bao gồm : TI, SAMSUNG, Marvell, Freescale, NXP, ATMEL... Theo mình thì chúng ta nên khởi đầu với sản phẩm của hãng nào có cộng đồng phát triển mã nguồn mở mạnh, có khả năng cấp tài liệu miễn phí (bao gồm cho cá nhân thay vì chỉ dành riêng cho công ty, doanh nghiệp). Việc lựa chọn này có ảnh hưởng đến khả năng thành công của dự án.

    3> CPU được support bởi hệ điều hành nào:
    - Sau khi lựa chọn CPU vendor, chúng ta sẽ có được danh sách CPU trong 1 dòng sản phẩm. Điều đầu tiên ta cần xác định rõ CPU này được hỗ trợ bởi hệ điều hành nào, và có phù hợp với hệ điều hành mà chúng ta cần phát triển hay không. Ví dụ cho hệ điều hành Linux: CPU cần có MMU (Memory Management Unit) và hỗ trợ bus bộ nhớ ngoài. Ngoài ra chúng ta cần xem xét đến tốc độ CPU, các ngoại vi cần phải có trong hệ thống... Và cuối cùng là giá thành của CPU như thế nào, có sẵn trên thị trường hay không.
    4> Tìm hiểu đặc tả, cơ chế boot của CPU:
    - Công việc đầu tiên của kỹ sư thiết kế hardware sẽ không loại trừ việc đọc datasheet và tìm hiểu các tài liệu đặc tả cho CPU này:
    + Cấu hình chân của CPU (package type): Cái này rất quan trọng đối với trường hợp VN chúng ta. Năng lực sản xuất PCB trong nước là có hạn, vì thế việc lựa chọn cấu hình chân CPU sẽ trở nên khó khăn và eo hẹp hơn.
    + Cơ chế boot của CPU: Trước tiên xâu dựng dự án, cơ chế boot của CPU là phần cực kỳ quan trọng mà chúng ta cần phải xem xét đến. Thông thường thì các đặt tả từ nhà sản xuất đề cập đến vấn đề này. Khi có đầy đủ thông tin về cơ chế này, người thiết kế phần cứng sẽ có quyết định lựa chọn linh kiện nào phù hợp cho từng kiểu boot. Ví dụ : NAND Flash, NOR FLash, SPI Dataflash, I2C EEPROM, MMC...
    5> Xây dựng sơ đồ nguyên lý cho hệ thống:
    - Để có được schematic hoàn chỉnh cho hệ thống, chúng ta cần tập hợp thông tin từ các CPU vendor càng nhiều càng tốt, bao gồm các tài liệu về schematic check list, CPU user manual, design application note...
    6> Thiết kế PCB:
    - Công đoạn thiết PCB tốn nhiều công sức, khi layout cần chú ý đến các đường bus giao tiếp bộ nhớ ngoài, các tụ trở mạch lọc cho PLL, các tụ lọc nguồn cho CPU.
    CÁC BƯỚC XÂY DỰNG PHẦN MỀM:
    Tương tự phần cứng, việc xây dựng phần mềm cũng được chia ra nhiều công đoạn:
    1> Cài đặt boot loader:
    Thông thường các hãng sản xuất chíp cung cấp cho chúng ta mã nguồn, công cụ để xây dựng boot loader. Đa số các CPU được sản xuất với ROM on chip và được cài sẵn chương trình boot. Tuy nhiên, thông thường những chương trình này ko đủ khả năng boot được Linux OS, người thiết kế hệ thống cần phải kết hợp chương trình này với các thiết bị lưu trữ (được nêu ở trên) để thực hiện những chương trình boot có tính năng mạnh hơn. Tùy vào loại CPU khác nhau mà ta phải trải qua 2 hay 3 tầng boot loader để khởi động được Linux OS. Ví dụ như MPU AT91SAM9 của ATMEL có 3 tầng bootloader : ROM boot ---> AT91BootStrap ----> u-boot.
    2> Cài đặt Linux OS (porting):
    Thành phần nồng cốt của Linux OS là kernel, về bản chất nó chỉ là các mã lệnh chương trình thực thi trên CPU. Tuy nhiên, kernel giữ vai trò quản lý các tiến trình hoạt động trong hệ thống. Kernel Linux được xây dựng bởi code C và một số ASM cho từng loại kiến trúc CPU cụ thể. Source code của kernel được quản lý bởi tổ chức phát triển mã nguồn mở Linux, chúng ta có thể download miễn phí tạiwww.kernel.org. Tuy nhiên, khi ta xây dựng phần cứng mới thì không hẳn có thể chạy được Linux OS, bởi vì can phải đảm bảo mối tương quan giữa phần cứng và kernel. Thông thường các CPU vendor xây dựng phần cứng chuẩn được gọi là evaluation kit. Họ sẽ chỉnh sửa source kernel (startup code, driver...) để board có thể vận hành được Linux OS. Thao tác này theo thuật ngữ người ta gọi là porting. Kết quả của việc porting tạo ra các bản vá (patch).
    3> Phát triển driver :
    Source kernel Linux bao gồm tập hợp các driver đã viết sẵn và được chuẩn hóa thành tài liệu. Tuy nhiên, người phát triển có thể tự viết driver cho riên mình để phù hợp với nhu cầu của dự án. Linux kernel hỗ trợ cho việc phát triển driver theo 2 dạng: built-in hoặc là module.
    4> Xây dựng root file system (rootfs):
    Khung sườn của hệ điều hành Linux là rootfs. Đây là tập hợp những chương trình ứng dụng, các tiện ích của hệ điều hành. Chúng ta có thể xây dựng rootfs từ nhiều nguồn khác nhau: OpenEmbedded (Angstrom), LTIB, Buildroot, Debian...
    5> Phát triển phần mềm ứng dụng:
    Linux OS cung cấp cho chúng ta tập hợp thư viện rất phong phú cho nhiều lĩnh vực khác nhau: mạng, đồ họa, image processing, telecom... Người phát triển phần mềm sẽ dùng những thư viện này và viet chương trình theo mong muốn.

  2. kaszuky New Member

    Số bài viết: 8
    Đã được thích: 0
    Điểm thành tích: 0
    Triết lí của nó là như thế nhưng để mà làm được thực hiện được thì còn phải trải qua 1 chặn đường rất dài :D. Cảm nhận của mình :D

Chia sẻ trang này