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.
À, sản phẩm họ thiết kế ra, họ yêu cầu mình chứng minh là sau chỉnh sửa thì 1 là gỡ jump cắm lại không hư mạch, 2 là gỡ jump thì 220Vdc vẫn dùng được led áp thấp 20V mà không hư led như mình báo, nên họ hiểu rõ mà....
Bài học kiểu trực tuyến dù là loại đơn giản bậc nhất cũng vẫn cần chú tâm. Chỉ bật tai nghe lên thì không có loại nào thấm nổi đâu. Cách hay hơn, dễ hơn là kiếm phim tiếng Anh nào đó xem, ban đầu bật phụ đề tiếng Việt, nghe và...
Ha ha !
Thay đổi cách nghĩ thì sẽ nghĩ ra.
.
.
.
Một thứ cần kiểm soát dòng + nhiệt + công suất tiêu tán. Nhưng lại dùng tư duy ổn áp. Làm sao mà giải quyết được.
Nó là mạch ổn dòng.
Vì thế các anh nước lạ không thèm quan tâm là phải....
Vì cứ phải chỉnh sửa cho mỗi dải điện áp, quên chỉnh thì hư chíp phải bảo hành nên em thấy bất tiện, mới cần cái mạch 1 dải áp cao dùng cho tất cả loại đèn đó bác!...
Mình thỉnh thoảng cũng làm việc với người nước ngoài nói tiếng Anh thì toàn ghép nhặt từ, cộng với quơ tay quơ chân để diễn tả, hix. Nỗi khổ là không biết cách để mô tả sự việc. Tôi muốn tìm các bài giảng tiếng anh nào phù hợp...
Trước khi có đủ thực lực thì chỉ làm vì mình thôi đừng nghĩ đến chuyện khác cái mạch toàn dãi tiện sử dụng nhưng tỷ lệ hư hỏng phải bảo hành cũng cao hơn ,lợi bất cập hại .
Comment