Nếu đây là lần đầu tiên đến với Điện Tử Việt Nam, bạn có thể đọc phần Hỏi đáp bằng cách nhấn vào liên kết. Có thể bạn cần đăng kí trước khi có thể gửi bài . Để bắt đầu xem bài viết, chọn diễn đàn bạn muốn thăm dưới đây.
uCLinux vốn không phải hệ điều hành nhúng, cũng chẳng phải thời gian thực. Nhúng hay không, thời gian thực hay không phụ thuộc vào người đặt cấu hình cho nó.
Một hệ điều hành dùng để làm gì ? Tại sao lại phải cài trên một hệ điều hành khác ?
em xin được hỏi bác bqviet nếu vậy uclinux có thể là một DISTRIBUTION giống như ubuntu nhỉ?
hay nó cũng chỉ kiểu như 1 ứng dụng được cài trên HDH đẻ phục vụ cho 1 mục đích nào đó?
nói thật là em còn rất mù mờ về mấy cái HDH nên không có cái nhìn rõ ràng.
Nó chỉ là một cái nhân (lõi) hệ điều hành, không phải là một bản phân phối đầy đủ. uCLinux chính là lõi Linux, nhưng có một số thành phần được viết lại. Tham khảo tiếp tại đây http://www.uclinux.org/
Bản phân phối Linux nào cũng có thể dùng phát triển hệ thống nhúng được. Nếu bạn dùng công cụ thương mại, bạn nên dùng bản phân phối Linux được cái hãng sản xuất công cụ đó hỗ trợ. Thông dụng vẫn là RedHat, Debian và (có thể) SUSE, Slackware. Công cụ của cộng đồng thường hỗ trợ thêm Ubuntu và Mandriva.
uCLinux =linux + uClibC (thư viện nhỏ hơn glibc)
vô impactlinux.com của Rob Landley
anh ta tạo đầy uclinux cho đủ mọi cpu khác nhau !
(trạm độc nhất có nhiều linux_cpusex khác nhau )
Tất cả có thể chạy trên qemu với bất kỳ distro nào !
Bác bqviet cho em hỏi một chút. Tình hình là em đang sử dụng một board Blackfin BF537-Stamp để ngâm cứu uClinux, vấn đề là các source code của uClinux-dist mà em down trên trang http://blackfin.uclinux.org lúc biên dịch lại và nạp vào mạch thì không có phiên bản nào chạy được (kể cả lúc biên dịch ở chế độ default). Quá trình biên dịch em làm chính xác như hướng dẫn trên trang hướng dẫn http://docs.blackfin.uclinux.org rồi mà vẫn không được mặc dù em đã thử đặt lại các lựa chọn biên dịch khác nhau, nếu lựa chọn là mặc định thì biên dịch được nhưng lúc chạy bị treo lúc gần khởi động xong, còn nếu để khác chế độ mặc định thì lúc biên dịch báo lỗi tùm lum. Điều khiến em băn khoăn là nếu sử dụng các file Image hoặc file FLAT đã biên dịch sẵn (bản 2008 trở về trước) nạp vào thì lại chạy ngon lành, còn phiên bản 2009 trở về sau thì nạp vào cũng không chạy được (cả U-boot cũng thế). Bác có nhiều kinh nghiệm về vấn đề này nên nhờ bác hướng dẫn cho em một chút, chẳng hạn như những lựa chọn nào là cần thiết và lựa chọn nào thì không cần thiết? gõ lệnh "make xconfig" là nó hiện ra cả một rừng lựa chọn mà giải thích lại hết sức sơ lược, em lại mới bắt đầu tập tọe nên em cũng không chắc là lựa chọn đúng hay không :-(
Ngoài ra, trong quá trình tìm hiểu lại có một số điều chưa hiểu được, nhờ bác giải thích hộ em với:
1. Giả sử lúc mình nạp file ảnh của uClinux vào tại địa chỉ 0x1000000 thì khi chạy nó hiện ra như sau:
## Booting kernel from Legacy Image at 1000000 ...
Image Name: uClinux Kernel Image
Created: 2005-09-30 3:03:16 UTC
Image Type: Blackfin Linux Kernel Image (gzip compressed)
Data Size: 1429678 Bytes = 1.4 MB
Load Address: 00001000
Entry Point: 00042000
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
Bác giải thích hộ em tại sao cả hai địa chỉ 0x1000000 và 0x1000 đều thuộc vùng RAM mà chương trình lại không bắt đầu tại địa chỉ 0x1000000 ? Thứ hai là địa chỉ "Entry point" 0x42000 ở đây có ý nghĩa gì? Chương trình sẽ có gì khác biệt nếu ta để Entry Point là 0x1000 ?
2. Nếu muốn chạy một chương trình ứng dụng, theo hướng dẫn thì sau khi build ứng dụng xong thì copy vào thư mục "romfs" của uClinux-dist rồi build lại, rồi lại nạp lại. Tại sao lại phải thế? Nếu em tìm cách copy file ứng dụng đã biên dịch ấy vào một thư mục nào đó trong uClinux đang chạy trên board thì có chạy được không? (như kiểu mình chạy ứng dụng trong Windows ý)
Hì, tìm hiểu linux embedded này mới biết cũng không ngon ăn lắm, nhưng dù sao cũng phải cố gắng. Rất mong được bác chỉ bảo thêm. Cảm ơn bác
Bác bqviet cho em hỏi một chút. Tình hình là em đang sử dụng một board Blackfin BF537-Stamp để ngâm cứu uClinux, vấn đề là các source code của uClinux-dist mà em down trên trang http://blackfin.uclinux.org lúc biên dịch lại và nạp vào mạch thì không có phiên bản nào chạy được (kể cả lúc biên dịch ở chế độ default). Quá trình biên dịch em làm chính xác như hướng dẫn trên trang hướng dẫn http://docs.blackfin.uclinux.org rồi mà vẫn không được mặc dù em đã thử đặt lại các lựa chọn biên dịch khác nhau, nếu lựa chọn là mặc định thì biên dịch được nhưng lúc chạy bị treo lúc gần khởi động xong, còn nếu để khác chế độ mặc định thì lúc biên dịch báo lỗi tùm lum. Điều khiến em băn khoăn là nếu sử dụng các file Image hoặc file FLAT đã biên dịch sẵn (bản 2008 trở về trước) nạp vào thì lại chạy ngon lành, còn phiên bản 2009 trở về sau thì nạp vào cũng không chạy được (cả U-boot cũng thế). Bác có nhiều kinh nghiệm về vấn đề này nên nhờ bác hướng dẫn cho em một chút, chẳng hạn như những lựa chọn nào là cần thiết và lựa chọn nào thì không cần thiết? gõ lệnh "make xconfig" là nó hiện ra cả một rừng lựa chọn mà giải thích lại hết sức sơ lược, em lại mới bắt đầu tập tọe nên em cũng không chắc là lựa chọn đúng hay không :-(
Ngoài ra, trong quá trình tìm hiểu lại có một số điều chưa hiểu được, nhờ bác giải thích hộ em với:
1. Giả sử lúc mình nạp file ảnh của uClinux vào tại địa chỉ 0x1000000 thì khi chạy nó hiện ra như sau:
Bác giải thích hộ em tại sao cả hai địa chỉ 0x1000000 và 0x1000 đều thuộc vùng RAM mà chương trình lại không bắt đầu tại địa chỉ 0x1000000 ? Thứ hai là địa chỉ "Entry point" 0x42000 ở đây có ý nghĩa gì? Chương trình sẽ có gì khác biệt nếu ta để Entry Point là 0x1000 ?
2. Nếu muốn chạy một chương trình ứng dụng, theo hướng dẫn thì sau khi build ứng dụng xong thì copy vào thư mục "romfs" của uClinux-dist rồi build lại, rồi lại nạp lại. Tại sao lại phải thế? Nếu em tìm cách copy file ứng dụng đã biên dịch ấy vào một thư mục nào đó trong uClinux đang chạy trên board thì có chạy được không? (như kiểu mình chạy ứng dụng trong Windows ý)
Hì, tìm hiểu linux embedded này mới biết cũng không ngon ăn lắm, nhưng dù sao cũng phải cố gắng. Rất mong được bác chỉ bảo thêm. Cảm ơn bác
Hi,
Xem qua log, có thể phỏng đoán lỗi của bạn có thể thuộc những trường hợp sau:
1> Khai báo tham số bootargs chưa đúng, UART chỉ hiệu lực lúc còn chạy trong u-boot, khi nhảy qua kernel nó không biết console là gì (không truyền qua UART).
2> Không đồng nhất mã máy, MACHINE_ID là mã nhận dạng và yêu cầu phải đồng nhất từ u-boot đến kernel.
3> RAM hệ thống bị lỗi.
> Booting kernel from Legacy Image at 1000000
> Load Address: 00001000
> Entry Point: 00042000
Những khái niệm này thuộc về u-boot, đây là các tham số cần thiết để lệnh bootm có thể tiến hành boot hệ thống. Quá trình boot sẽ diễn ra nhu sau:
+ Ban đầu chép ảnh uImage vào địa chỉ 0x1000000 (có thể thông qua tftp, nand flash, norflash, mmc...)
+ Verify crc32 và checksum.
+ Gải nén ảnh tại địa chỉ 0x1000000 và lưu vào địa chỉ 0x00001000, nếu kích thước file sau khi giải nén + 0x00001000 vượt quá giá trị 0x1000000 thì coi như tiêu.
+ Chép tham số bootargs đến vùng scratchpad memory (nơi kernel sẽ tham chiếu đến để lấy thông số khi boot).
+ Cuối cùng thực hiện lệnh nhảy đến địa chỉ 0x00042000 (entry point) thực hiện khởi động Linux.
Chính vì thế, khi load ảnh lên SDRAM thì nên để lùi về sau 1 chút (lớn hơn 0x1000000, bởi mỗi khi compile thêm driver cho kernel, kích thước sau khi giải nén nó phình to ra, ngăn ngừa hiện tượng overlap memory.
Mình cần đặt hàng thiết kế chế tạo mạch nghịch lưu 3 pha để cài đặt các thuật toán điều khiển động cơ FOC, DTC, ... Xin liên hệ trungaut@gmail.com để bàn chi tiết. Xin cảm ơn diễn dàn đăng tin!
Trừ trường hợp công suất (rất) thấp, hầu như tất cả các loại nguồn xung thông thường đều có tụ nhỏ 1 - 10nF nối giữa sơ cấp và thứ cấp, để thoát nhiễu và để chống hiện tượng tương tự tĩnh điện. Vụ này đã thảo luận vài...
Dạ chú sắm con át chống giật và thay nguồn tổ ong khác cho an toàn ạ. Đa phần nguồn xung đều xả nhiễu của bên thứ cấp về điện lưới qua 1 con tụ nên cảm giác tê sẽ khó xác định rõ ràng là do rò điện hay là nó vốn vậy...
Comment