Jika Anda ingin OS total abaikan saja, Anda perlu membuat lubang memori menggunakan "memmap
." Lihat referensi ini. Misalnya, jika Anda ingin 512M dengan penghalang 2GB, Anda dapat meletakkan "memmap=512M$2G
" pada baris perintah kernel Anda.
Anda perlu memeriksa dmesg
Anda untuk menemukan lubang yang berdekatan untuk dicuri sehingga Anda tidak menginjak perangkat apa pun; yang khusus untuk motherboard+kartu Anda.
Ini tidak cara yang disarankan untuk melakukan sesuatu - lihat jawaban Warren Young untuk cara melakukannya dengan benar (driver kernel + DMA). Saya menjawab pertanyaan persis yang Anda tanyakan. Jika Anda berencana membuat ini untuk pengguna akhir, mereka akan membenci Anda jika Anda melakukan ini pada mereka... percayalah, itulah satu-satunya alasan saya tahu jawaban ini.
Sunting:Jika Anda menggunakan grub2 w/kotor (mis. CentOS 7), Anda harus memastikan untuk keluar dari $. Harus ada satu \
sebelum $
. Contoh:
$ sudo -v
$ sudo grubby --update-kernel=ALL --args=memmap='128M\\$0x57EF0000'
$ sudo grubby --info $(sudo grubby --default-kernel) | grep memmap
args="ro crashkernel=auto ... memmap=128M\$0x57EF0000"
Apa yang Anda minta disebut DMA. Anda perlu menulis driver untuk menyimpan memori ini.
Ya, saya sadar Anda mengatakan Anda tidak ingin OS campur tangan, dan driver menjadi bagian dari OS, tetapi jika tidak ada reservasi driver, kernel yakin semua memori adalah miliknya. (Kecuali jika Anda memberi tahu kernel untuk mengabaikan blok memori, sesuai jawaban Aaron, yaitu.)
Bab 15 (PDF) dari "Linux Device Drivers, 3/e" oleh Rubini, Corbet, dan Kroah-Hartmann mencakup DMA dan topik terkait.
Jika Anda menginginkan versi HTML ini, saya menemukan versi edisi kedua dari bab ini di tempat lain secara online. Berhati-hatilah karena edisi ke-2 sudah berumur lebih dari satu dekade sekarang, keluar ketika kernel 2.4 masih baru. Ada banyak pekerjaan pada subsistem manajemen memori kernel sejak saat itu, sehingga mungkin tidak dapat diterapkan dengan baik lagi.
Untuk mencadangkan satu blok memori dari kernel di Linux berbasis ARM, Anda juga dapat menggunakan reserved-memory
node di file device tree (dts) Anda. Dalam dokumentasi kernel (lihat di sini), ada sebuah contoh:
memory {
reg = <0x40000000 0x40000000>;
};
reserved-memory {
#address-cells = <1>;
#size-cells = <1>;
ranges;
/* global autoconfigured region for contiguous allocations */
linux,cma {
compatible = "shared-dma-pool";
reusable;
size = <0x4000000>;
alignment = <0x2000>;
linux,cma-default;
};
display_reserved: [email protected] {
reg = <0x78000000 0x800000>;
};
multimedia_reserved: [email protected] {
compatible = "acme,multimedia-memory";
reg = <0x77000000 0x4000000>;
};
};