Kullanıcı alanı kodunu ve varsayılan üstbilgileri derlemek için gerçek zamanlı çekirdek başlıklarını kullanma


11

Müşteri gereksinimlerine göre CentOS 5.6'yı varsayılan çekirdeğe yükledim. Bu çekirdek yüklendiğinde time.h dosyası #define CLOCK_MONOTONIC.

Şimdi, çekirdek-devel ile birlikte gerçek zamanlı bir çekirdek kuruldu ve kodumuz kullanmak istiyor CLOCK_MONOTONIC_RAW. Çekirdeğin başlık dosyalarının bir parçası olarak bulunur, ancak kodumuzu derlediğimde, standart kullanıcı alanında bulunanları bulamaz.

Sorum şu: Bulunanı time.hvarsayılan olarak gerçek zamanlı çekirdeğe eklemek / değiştirmek için doğru prosedür nedir? Araştırmamdan, semboller kötü gibi görünüyor, bu yüzden nasıl ele alınmalı? Prosedür veya süreç nedir? CentOS 6.0 veya 5.7 sürümüne yükseltme, müşteri gereksinimlerine göre bir seçenek değildir.


Bu modülü varsayılan CentOS çekirdeğine eklemeyi planlıyor musunuz?
bahamat

Yanıtlar:


1

Başlık dosyalarının nereden geldiği konusunda önemli bir ayrım vardır:

  • <time.h>glibc tarafından sağlanır (örneğin glibc-headerspaket)
  • <linux/time.h> Linux çekirdek başlıkları tarafından sağlanır.

Çekirdeğin ve başlık paketlerinin değiştirilmesi etkilenmeyecektir <time.h>. Bunu sadece glibc değiştirmek yapacak.

O glibc en bulmalı <time.h>içerir <bits/time.h>ör olarak hangi giderir /usr/include/x86_64-linux-gnu/bits/time.hve tanımlayıp CLOCK_MONOTONIC_RAW. Yüklü değilse ve yükseltemiyorsanız, aşağıdaki gibi kod eklemeye başvurmanız gerekir:

#include <time.h>
#ifndef CLOCK_MONOTONIC_RAW
# define CLOCK_MONOTONIC_RAW 4
#endif

0

Sadece ihtiyacın var #include <linux/time.h>


Cevap için teşekkürler. Linux / time.h konumunu kontrol ettim ve "RAW" referansı da yok. Güncelleştirilmiş bir gerçek zamanlı çekirdek çalıştırıyorum, ancak "RAW" referansı olan yeni çekirdeğin başlıklarını kullanıcı alanı başlık dosyalarına nasıl aktaracağımı anlamam gerekiyor. Bir anlam ifade ediyor muyum yoksa yaklaşımım doğru mu? Yardım için tekrar teşekkürler.
cabanaboy

@cabanaboy, nereye baktığınızdan veya dosyanın nereden geldiğinden emin değilim, ancak linux / time.h kesinlikle CLOCK_MONOTONIC_RAW tanımlamalıdır. Gerçek zamanlı bir çekirdek çalıştırıp çalıştırmamanız da önemli değildir; başlıklar aynı.
psusi

3
@cabanaboy, bekle ... eklendiğinde 2.6.28'den daha eski bir çekirdeğe sahip olması gereken eski bir işletim sistemi çalıştırıyorsunuz. Yeni çekirdeği nasıl kurdunuz? Eğer kaynağından kendiniz inşa ettiyseniz, yapmanız gerekir make install_headers. Güncellenmiş bir çekirdek paketiniz varsa, karşılık gelen güncellenmiş kernel_headers paketini almanız gerekir.
psusi

0

Dağıtımınızın yüklediği üstbilgiler çekirdekte bulunanlar değil , sanitzed / "userpaced" sürümleridir. Çekirdek kaynaklarında include / linux içindeki başlıkların bir kopyasını almanız ve / usr / include / linux (gcc için -I bayrağını kaldırmanız gerekir) tercihlerine göre ayarlanması gerekir. Ve hiçbir şeyin yanlış ateşlenmediğini kontrol edin.


0

Yeni çekirdekle gelen başlıklara karşı inşa ettiğimden emin olurdum. CLOCK_MONOTONIC_RAWiçinde tanımlanmalıdır linux/time.h. Önce hangi başlıkları kullandığınızı bulun ve dosyada nasıl tanımlandığını kontrol edin. Ne olduğunu görmek için kodunuzda tanımlayabilirsiniz (yalnızca onay olarak).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.