Ответ 1
Макрос определяет некоторый символ (например, функцию) как экспортируемый (видимый из загружаемых модулей ядра). Если у символа нет "EXPORT_SYMBOL", он не будет доступен из модулей.
EXPORT_SYMBOL_GPL
отобразит символ только в лицензированных модулях GPL и EXPORT_SYMBOL
- в модулях с любой лицензией.
http://lwn.net/Articles/154602/ - О значении EXPORT_SYMBOL_GPL (2005, corbet)
Когда загружаемый модуль вставлен, любые ссылки, которые он делает на функции ядра и структуры данных, должны быть связаны с текущим запущенным ядром. Однако загрузчик модуля не обеспечивает доступа ко всем символам ядра; доступны только те, которые были явно экспортированы.
Экспорт поставляется в двух вариантах: vanilla (EXPORT_SYMBOL) и GPL-only (EXPORT_SYMBOL_GPL). Первые доступны для любого модуля ядра, а последние не могут использоваться никакими модулями, которые не имеют лицензии, совместимой с GPL.