Ïàʶ°²×¿ÏµÍ³ÓëLinuxÄں˵ÄÁªÏµÓëÇø±ð
ÎÊÌ⣺ÉîÈë̽ÌÖ°²×¿ÏµÍ³ÓëLinuxÄں˵ÄÁªÏµÓëÇø±ð
°²×¿ÏµÍ³×÷ΪÏÖÔÚÈ«ÇòÓû§ÊýÄ¿×î¶àµÄÒƶ¯²Ù×÷ϵͳ֮һ£¬Æäµ×²ã½¹µã½ÓÄÉÁËLinuxÄںˡ£ÔÚ°²×¿ÏµÍ³ÖУ¬LinuxÄÚºËÊÎÑÝ×ÅÖ÷ÒªµÄ½ÇÉ«£¬ÈÏÕæÖÎÀíÓ²¼þ×ÊÔ´¡¢ÌṩϵͳÎȹÌÐÔºÍÇå¾²ÐÔÖ§³ÖµÈ¹¦Ð§¡£±¾ÎĽ«ÉîÈë̽ÌÖ°²×¿ÏµÍ³ÓëLinuxÄں˵ÄÁªÏµÓëÇø±ð£¬²¢Í¨¹ýÏêϸ´úÂëʾÀýÀ´Ú¹ÊͶþÕßÖ®¼äµÄ¹Øϵ¡£
Ò»¡¢ÁªÏµ£º
1.1 ÅäºÏ»ù´¡£º
°²×¿ÏµÍ³ºÍLinuxÄں˶¼¾ßÓпªÔ´µÄÌص㣬¶¼ÓÉÈ«ÇòµÄ¿ª·¢ÕßÅäºÏ¼ÓÈëά»¤ºÍˢС£°²×¿ÏµÍ³ÔÚLinuxÄں˵Ļù´¡ÉϾÙÐÐÁ˶þ´Î¿ª·¢£¬¼ÓÈëÁ˸ü¶àµÄ¹¦Ð§Ä£¿éºÍЧÀÍ£¬ÈçÓ¦Óÿò¼Ü¡¢½çÃæϵͳµÈ£¬ÒÔÖª×ãÒƶ¯×°±¸µÄÐèÇó¡£
1.2 ×ÊÔ´ÖÎÀí£º
LinuxÄÚºË×÷Ϊ°²×¿ÏµÍ³µÄµ×²ã½¹µã£¬ÈÏÕæÖÎÀíÓ²¼þ×ÊÔ´£¬°üÀ¨´¦ÀíÆ÷¡¢ÄÚ´æ¡¢ÍøÂçµÈ×°±¸¡£°²×¿ÏµÍ³Í¨¹ýLinuxÄÚºËÌṩµÄ¸»ºñ½Ó¿Ú£¬ÊµÏÖ¶ÔÓ²¼þ×ÊÔ´µÄ»á¼ûºÍ¿ØÖÆ£¬´Ó¶ø°ü¹ÜÓ¦ÓóÌÐòÄܹ»Õý³£ÔËÐС£
1.3 Çå¾²ÐÔ£º
LinuxÄÚºËÔÚÇå¾²ÐÔ·½Ãæ¾ßÓнϸߵĿɿ¿ÐÔ£¬Äܹ»ÌṩÎļþȨÏÞ¡¢Àú³Ì¸ôÀëµÈÇå¾²»úÖÆ¡£°²×¿ÏµÍ³ÔÚ´Ë»ù´¡ÉϽøÒ»²½ÔöÇ¿ÁËÓû§È¨ÏÞÖÎÀí¡¢Ó¦ÓÃɳÏäµÈÇå¾²²½·¥£¬È·±£ÏµÍ³µÄÎȹÌÐÔºÍÊý¾ÝÇå¾²¡£
¶þ¡¢Çø±ð£º
2.1 Ó¦Óòã²î±ð£º
°²×¿ÏµÍ³Ïà½ÏÓڹŰåµÄLinuxϵͳ£¬Ô½·¢×¢ÖØÒƶ¯×°±¸µÄÓû§ÌåÑéºÍÓ¦ÓÃÉú̬£¬Òò´ËÔÚÓ¦ÓòãÉϾÙÐÐÁË´ó×ÚµÄˢкÍÓÅ»¯¡£°²×¿ÏµÍ³½ÓÄÉÁË×Ô¼ºµÄÓ¦Óÿò¼ÜºÍ½çÃæϵͳ£¬Óë¹Å°åµÄLinuxϵͳÓнϴóÇø±ð¡£
2.2 ÄÚÉó¶¨ÖÆ£º
°²×¿ÏµÍ³¶ÔLinuxÄں˾ÙÐÐÁ˶¨ÖÆ£¬ÔöÌíÁËÐí¶àÕë¶ÔÒƶ¯×°±¸µÄÌض¨¹¦Ð§£¬Èçµç³ØÖÎÀí¡¢ÕÕÏàÖ§³ÖµÈ¡£ÕâЩ¶¨ÖÆ»¯µÄ¹¦Ð§Ê¹µÃ°²×¿ÏµÍ³¸üÊÊÓÃÓÚÒƶ¯×°±¸µÄÐèÇó£¬Óë¹Å°åµÄLinuxϵͳÓÐËù²î±ð¡£
2.3 Ðû²¼ÖÜÆÚ£º
°²×¿ÏµÍ³ºÍLinuxÄں˵ÄÐû²¼ÖÜÆÚÒ²ÓÐËù²î±ð¡£°²×¿ÏµÍ³Í¨³£Ã¿ÄêÐû²¼Ò»¸öеÄÖ÷Òª°æ±¾£¬¶øLinuxÄÚºËÔòÓÐÔ½·¢ÆµÈԵĸüкÍÐû²¼£¬ÒÔ˳Ӧ²î±ðÓ²¼þƽ̨ºÍÐèÇó¡£
Èý¡¢´úÂëʾÀý£º
ΪÁ˸üºÃµØÃ÷È·°²×¿ÏµÍ³ÓëLinuxÄں˵ÄÁªÏµ£¬ÒÔÏÂÊÇÒ»¸ö¼òÆӵĴúÂëʾÀý£¬ÑÝʾÁËÔÚ°²×¿Ó¦ÓÃÖÐŲÓÃLinuxϵͳŲÓõÄÀú³Ì£º
// ÔÚ°²×¿Ó¦ÓÃÖÐͨ¹ýJNIŲÓÃLinuxϵͳŲÓà public class MainActivity extends Activity { static { System.loadLibrary("native-lib"); } public native void helloWorld(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); helloWorld(); } }
µÇ¼ºó¸´ÖÆ
// C´úÂëʵÏÖŲÓÃLinuxϵͳŲÓà #include <jni.h> #include <stdio.h> #include <unistd.h> JNIEXPORT void JNICALL Java_com_example_MainActivity_helloWorld(JNIEnv *env, jobject obj) { printf("Hello World from Linux kernel! "); // ŲÓÃLinuxϵͳŲÓà int ret = syscall(SYS_getpid); printf("My process ID is %d ", ret); }
µÇ¼ºó¸´ÖÆ
ͨ¹ýÒÔÉÏ´úÂëʾÀý£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÔÚ°²×¿Ó¦ÓÃÖÐͨ¹ýJNIŲÓÃÁËC´úÂ룬½ø¶øŲÓÃÁËLinuxµÄϵͳŲÓá£ÕâչʾÁË°²×¿ÏµÍ³ÓëLinuxÄں˵ÄÁªÏµ£¬Í¬Ê±Ò²Õ¹Ê¾Á˶þÕßÖ®¼äµÄÐ×÷ÓëÕûºÏ¡£
×ÛÉÏËùÊö£¬°²×¿ÏµÍ³ÓëLinuxÄÚºËÖ®¼ä±£´æ×ÅÇ×½üµÄÁªÏµºÍÒ»¶¨µÄÇø±ð£¬¶þÕßÏ໥ÅäºÏ£¬ÅäºÏ×é³ÉÁË°²×¿×°±¸µÄ»ù´¡ÏµÍ³¡£Í¨¹ýһֱѧϰºÍÑо¿£¬ÎÒÃÇ¿ÉÒÔ¸üÉîÈëµØÃ÷È·¶þÕßÖ®¼äµÄ¹Øϵ£¬ÎªÒƶ¯Ó¦Óÿª·¢ºÍϵͳÓÅ»¯Ìṩ¸ü¶àµÄ˼Ð÷ºÍÒªÁì¡£
ÒÔÉϾÍÊÇÏàʶ°²×¿ÏµÍ³ÓëLinuxÄں˵ÄÁªÏµÓëÇø±ðµÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡