2009-02-03 32 views
5

Cách duy nhất để liên lạc với thiết bị nhúng của tôi là cổng nối tiếp. Theo mặc định, Linux nhúng sử dụng cổng này làm thiết bị đầu cuối. Làm cách nào để tắt thiết bị đầu cuối này và sử dụng liên kết nối tiếp để chuyển dữ liệu nhị phân? Tôi nghe nói về các lệnh như rx và tx nhưng tôi không thể tìm thấy chúng.Dữ liệu nhị phân trên thiết bị đầu cuối nối tiếp

Tôi nghĩ rằng tôi chỉ có thể đọc() từ và viết() cho đến/dev/tty nhưng tôi muốn đảm bảo không có thông báo lỗi hoặc bất kỳ sự lộn xộn nào với luồng dữ liệu của mình.

Trả lời

3

Bạn có thể sử dụng ứng dụng như xmodem để chuyển tệp qua bất kỳ thiết bị đầu cuối nào. Là cổng nối tiếp bạn nói ra một thiết bị đầu cuối, hoặc nó cũng là bàn điều khiển hạt nhân.

Nếu bạn là hạt nhân không ồn ào, sau đó bạn có thể sử dụng kết nối hiện tại của bạn để thực hiện xmodem như chuyển. Về phía máy chủ, bạn có thể sử dụng kermit, đó là tốt đẹp và kịch bản.

Nếu bạn muốn chắc cổng nối tiếp của bạn liệu, và bạn phải mô tả tập tin ttyfd mở ra, đây là một cách để làm điều đó:

struct termios tty, orig_tty; 

... 

if(tcgetattr(ttyfd, &tty) < 0) 
{ 
    // error checking 
} 
// backup tty, make it raw and apply changes 
orig_tty = tty; 
cfmakeraw(&tty); 
if(tcsetattr(ttyfd, TCSAFLUSH, &tty) < 0) 
{ 
    // error checking 
} 

... 
//end of program or error path : 
tcsetattr(ttyfd, TCSAFLUSH, &orig_tty) 

Đừng quên để khôi phục lại các thiết lập vào cuối năm chương trình của bạn nếu bạn vẫn muốn có một thiết bị đầu cuối tốt.

3

Bạn không thể đặt thiết bị đầu cuối thành thô?

Hãy xem this tutorial.

2

Bạn có thể chạy trên thiết bị đầu cuối một lệnh sẽ chuyển dữ liệu qua giao thức cấp ứng dụng. Các lệnh rx và tx bạn tham khảo để triển khai thực hiện XMODEM file transfer protocol. Nó có thể là một giải pháp, nếu dữ liệu nhị phân bạn muốn chuyển bao gồm các tệp, nhu cầu thông lượng thấp và bạn không nhớ phí quản trị của việc chạy các lệnh. Ngoài ra, bạn có thể muốn ghép cổng nối tiếp để xử lý cả truyền dữ liệu và đầu cuối. Vô hiệu hoá lệnh trình điều khiển thiết bị đầu cuối nối tiếp (getty) và chạy PPP protocoll trên dòng nối tiếp để thiết lập kết nối IP với thiết bị của bạn. Sau đó bạn có thể đăng nhập vào thiết bị thông qua ssh hoặc telnet và truyền dữ liệu của bạn thông qua một ổ cắm IP.

1

Có, tất cả các cổng nối tiếp của bạn nằm trong /dev/ttyxx. Lưu ý rằng /dev/tty là phím tắt viết tắt của thiết bị đầu cuối hiện tại của bạn, không phải là cổng nối tiếp cụ thể. Thông thường, chúng được sở hữu bởi root và yêu cầu bạn có quyền hoặc nằm trong nhóm adm để truy cập trực tiếp vào thiết bị từ ứng dụng của bạn.

Bạn có thể muốn chown thiết bị để bạn có thể truy cập. Tôi không chắc hậu quả của việc thay đổi quyền sở hữu thiết bị là gì; IIRC, thật dễ dàng để làm và hoạt động độc đáo. Cách khác là sử dụng setuid để nâng cấp chương trình của bạn lên trạng thái đặc quyền.

Có một chương trình có tên getty cho phép người dùng đăng nhập từ cổng nối tiếp. inittab của bạn sẽ bắt đầu getty trên các cổng nối tiếp để mọi người có thể đăng nhập.

Bạn muốn tắt getty. Trong một số trường hợp, có một trình quản lý cổng giúp thực hiện việc này.

Trong một số trường hợp, bạn có thể thay đổi inittab để sử dụng mgetty, đây là phiên bản kiểm soát thông minh hơn và dễ dàng hơn của getty.

3

Để tắt bàn điều khiển Linux, bạn phải thay đổi dòng lệnh Linux do trình khởi động tạo ra từ: console =/dev/ttyS? tới: bảng điều khiển = null

2

Như các ghi chú khác đã ngụ ý, có một số điều cần rà soát, thu thập ở đây:

  1. Hãy chắc chắn rằng hạt nhân Linux không sử dụng cổng nối tiếp. Đảm bảo không có tùy chọn console = tùy chọn trên lệnh khởi động trong tệp grub của bạn. Nó thường không có theo mặc định.
  2. Đảm bảo không có ổ đĩa nào chạy trên cổng nối tiếp. Tìm trong/etc/inittab cho một mục nhập cho/dev/ttyS0 (cổng nối tiếp A) và nhận xét nó nếu nó ở đó.
  3. Đảm bảo/dev/ttyS0 có thể đọc và ghi bởi quy trình của bạn. Bạn có thể tạo một người dùng cụ thể theo đó chương trình điều khiển được chạy và chương trình sở hữu/dev/ttyS0, sau đó chmod 700/dev/ttyS0. Điều này sẽ giúp đảm bảo một số người dùng/chương trình khác cũng không thử sử dụng cổng nối tiếp.
  4. Sử dụng mở() trên ttyS0 để nhận fd, sau đó sử dụng họ hàng tcsetattr để cài đặt tốc độ và kỷ luật.

Chương trình đầu cuối có thể sẽ không hữu ích cho bạn trừ khi bạn có thể chạy cùng một chương trình trên thiết bị nhúng để quản lý đầu kia của kết nối.

Các vấn đề liên quan