Реализация потоков файлов C (FILE *, fopen, fread и т. Д.) На встроенной платформе - PullRequest
5 голосов
/ 04 февраля 2010

Мне было поручено добавить поддержку потоков (C89 / C90) в библиотеки для встроенного компилятора C моей компании. Наше целевое оборудование обычно имеет 1 МБ или меньше места в коде и не имеет операционной системы.

У нас есть много потоковых реализаций в кодовой базе, которые я могу использовать в качестве отправной точки. Например, консоль, которая работает через сокеты TCP или последовательный порт, веб-сервер, который читает данные из FAT на SD-карте или в файле в памяти, и даже средство обновления прошивки, которое читает из многих источников.

Прежде чем я пойду и заново изобрету колесо, мне интересно, существуют ли существующие реализации, которые я мог бы либо портировать, либо использовать в качестве отправной точки для своей работы. Несмотря на то, что мы предоставляем полный исходный код нашим клиентам, лицензированный по лицензии GPL код не подходит, поскольку наши клиенты не хотят выпускать исходный код для своих продуктов.

Кто-нибудь может порекомендовать книгу (аннотированный источник Unix, текст CompSci) или общедоступный / BSD-лицензированный источник? Я бы предпочел взглянуть на более старую ОС, ориентированную на одно устройство, так как современные операционные системы содержат клубок макросов и слоев typedef, которые затрудняют даже простое определение структуры.

Ответы [ 5 ]

8 голосов
/ 04 февраля 2010

Взгляните на книгу П. Дж. Плаугера Стандартная библиотека C , в которой подробно описывается одна возможная реализация полной стандартной библиотеки C89.

5 голосов
/ 04 февраля 2010

Вы должны быть в состоянии извлечь большую часть того, что вам нужно из исходного кода для стандартной библиотеки GNU C . Он лицензируется по Lesser GPL , что означает, что вы можете ссылаться на библиотеку, не затрагивая лицензию вашего программного обеспечения (или заставляя своих клиентов выпускать свой код). Портировать это на свою платформу (таким образом, сохраняя код LGPL в своей собственной библиотеке) может быть проще, чем реализовывать свой собственный с нуля.

Несколько различных проектов взяли GNU GLIBC и оптимизировали его для встраиваемых систем. Вы можете посмотреть на:

В частности, EGLIBC и uLIBC были разработаны для правильной работы на встроенных системах, в которых отсутствует MMU.

Вы также можете взглянуть на реализацию BSD libc

В качестве альтернативы есть STLSoft , который предоставляет несколько библиотек (включая стандартную библиотеку C) под лицензией BSD. Я не могу засвидетельствовать их качество, поскольку сам не использовал их код, но, возможно, стоит обратить внимание, если вы не можете внедрить код LGPL в свой проект.

2 голосов
/ 04 февраля 2010

Не подойдет ли libc * BSD (Net | Open | Free)? По крайней мере, в качестве отправной точки.

1 голос
/ 04 февраля 2010

Попробуйте посмотреть http://www.minix3.org/

0 голосов
/ 04 февраля 2010

Проверьте свои инструменты разработки. Некоторые инструменты разработки поставляются с исходным кодом для их библиотек программного обеспечения.

Я взял исходный код компилятора printf и адаптировал его для порта отладки во встроенной системе. Когда у вас есть фундамент для строительства, работы становится меньше.

...