Не знаю с какого боку подойти.
Разбираюсь с защитой от несанкционированного копирования SDкарты.
В imx233 прошивались ключи лочился процессор заранее шифровался образ. При старте разворачивался в рам и работал.
Как тут быть непонятно.
Могу предположить что вполне возможно зашифровать стандартными средствами линукса. HW копирование карты сделает карту идентичную этой и позволит запускать на такой же плате скопированный образ.
Наткнулся на описание HAB4 но очень уж мудрёно. Может есть какой-то способ более простой?
В досе так делали: размещали сектор вне файла, и только утилиты вроде dd могли скопировать. На дисектах ещё была возможность создать нестандартный сектор на последней дорожке, и т.п.
Более серьёзно - посмотрите в сторону чтения аппаратных идентификаторов носителя - производитель, модель, серийник вроде тоже доступен.
Если MicroSD и пр. носители, то вопрос стоит не о защите программ а о защите информации. В линукс уже есть штатное средство CryptoFS. Для "надежности" в широком смысле слова, носители форматируем как UBIFS.
Получать серийник SD карты - не лучшее решение. Могут быть китайские карты без серийника или вовсе - несколько с одинаковыми. Считаю, что лучше брать серийник процессора.
Поискал варианты его получения, везде советуют брать из /proc/cpuinfo:
Читайте доку на процессор, все предусмотерно, записываете ключик в процессор (однократно программируемые fuse) и шифруете им исполняемый бинарник.
Этот механизм внедрен еще со времен imx233 ...
возможно убут должен передавать - надо смотреть, ревизия процессора точно через загрузчик передается - я столкнулся с этим когда свой делал и упустил этот момент - gstreamer перестает узнавать тип процессора из /proc/cpuinfo и плагин для VPU не работает. Ревизия помоему из ANATOP читается.
CFG0,1 - младшее и старшее слово уникального идентификатора. На 3.0.35 не знаю как сделано - надо ядро и корневую собирать, возможно точно так же. Чтение серийника есть только в старом убуте да и не вижу особого смысла убут править