- Katılım
- 24 Şubat 2018
- Mesajlar
- 24,695
Örneğin elimizde PNG formatında bir görüntü dosyası var ve bunu gömülü bir sistemde doğrudan kullanmak istiyoruz, çünkü dosyayı saklayacak bir disk yok. Bu durumda dosya içeriğinin bir C array haline getirilmesi gerekir. Bu işi yapmak için grafik arayüzlü programlar bolca mevcut. Ayrıca bunun internet siteleri de var. Dosyayı yüklüyorsun, dönüşümü yapıp sonucu lokal olarak kaydetmeni sağlıyor. Ama bu yöntemlerin hiçbirisi otomasyona uygun değil. Mesela bir firmware projesini build ederken, bu build işleminin bir parçası olarak bu dönüşümü yapmak istiyorsak, bu grafik arayüzlü programların veya internet sitelerinin hiçbir faydası olmuyor.
Bu noktada gene bize en verimli çözümü Linux komut satırı sağlıyor.
Burada
Bu noktada gene bize en verimli çözümü Linux komut satırı sağlıyor.
xxd
isimli program, tam olarak bu işi yapan bir program.
Kod:
[ta@bonsai src]$ xxd -i image.png image.h
[ta@bonsai src]$ cat image.h
unsigned char image_png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x00, 0x7c,
0x08, 0x06, 0x00, 0x00, 0x00, 0xbb, 0x77, 0x0f, 0x0e, 0x00, 0x00, 0x00,
0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x12, 0x00, 0x00, 0x0b,
0x12, 0x01, 0xd2, 0xdd, 0x7e, 0xfc, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44,
0x41, 0x54, 0x78, 0x9c, 0xed, 0x7d, 0x09, 0x7c, 0x55, 0xc5, 0xd9, 0xfe,
0x73, 0x6e, 0x42, 0x12, 0x12, 0x72, 0xb3, 0x40, 0x80, 0xb0, 0x25, 0xec,
0x22, 0x90, 0x04, 0xa8, 0x50, 0xad, 0x42, 0x14, 0xb4, 0xf6, 0x6b, 0x05,
0x6d, 0x5d, 0xaa, 0x9f, 0x0a, 0xae, 0xad, 0xf5, 0xab, 0x68, 0xd5, 0xaf,
*
*
*
0x9a, 0x56, 0x19, 0xa6, 0xc9, 0x34, 0x82, 0x66, 0xa0, 0xb6, 0x12, 0xff,
0x1f, 0xa5, 0xfb, 0x38, 0x31, 0xab, 0xfd, 0xde, 0x81, 0x00, 0x00, 0x00,
0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
unsigned int image_png_len = 17649;
Burada
xxd
programına verdiğimiz -i
argümanı, bir C include dosyası çıktısı istediğimizi programa bildiriyor. Artık tek yapmamız gereken, firmware kaynak kodunda image.h
dosyasını include etmek.