Hi everybody For my endthesis I wrote a Framework that automatically generates a Kernel-Configuration . A Kernel-Patch, the sources and a readme are attached to this mail. For more details please read the README.txt. Comments and suggestion are welcome. Regards Ahmad Reze Cheraghi ______________________________________________________ Click here to donate to the Hurricane Katrina relief effort. http://store.yahoo.com/redcross-donate3/
Attachment:
autoconfig_0_1_patch.tgz
Description: 1469308934-autoconfig_0_1_patch.tgz
Attachment:
autoconfig_0_1.tgz
Description: 2327105889-autoconfig_0_1.tgz
For my EndThesis, in the Niederrhein University of Applied Sciences, I've right-now almost finished a framework that generates a .config file based on the target system. This program should help people to generate a linux kernel Config without spending a lot of time at the configuration. The basic idea of the framework is, that the options asked by "make config" will be redirected to a set of scripts. Those scripts answers are depending on the hardware/system the option-question. This framework is now in its test stage. It works on my Acer Laptop(TM 291LMI with Pentium M and Radeon 9700). That means, - the framework is functional - but additional scripts have to be written for other type of hardware/functionality (far away from completed) - an additional Help is an output that the autoconfig gives out after his work is done, which tells us that in some menus the amount of needed options did not elected. Constist: ******** The Linux Auto-Config consist of Files, auto_conf.c, an upgraded conf.c and Makefile, a directory (rules) which contains a rules_list and the scripts, and a xmlparser written by Tim Hockin. install: ******* You've just to download the autoconfig*.tgz and unpack it in the /usr/src/<KERNELVERSION>/scripts/kconfig directory. To run it go to your the <KERNELVERSION> directory and type for using the sources: (root) # cd /tmp/ (root) # tar xvfz autoconfig*.tgz (root) # cp -r autoconfig*/* /usr/src/<KERNELVERSION>/scripts/kconfig (root) # cd /usr/src/<KERNELVERSION>/ for using the patch: (root) # cd /tmp/ (root) # tar xvfz autoconfig*-patch.tgz (root) # cd /usr/src/<KERNELVERSION>/ (root) #root) # patch -p1 < /tmp/autoconfig*/sources.patch (root) # chmod u+x scripts/kconfig/rules/* (root) # make auconfig !! Be carefull: since we want to build a config from scratch on, the .config will be deleted automaticly. How does it work: ***************** The trick of all is a framworking program, that means adding binaries or scripts without touching the real program. The program starts like if you are starting a make config, but at that point where it wants an input from you, the function auto_conf gets called with that option-question as a parameter. We are comparing this option with in a list manual-written Kconfig option. Each of those options in the list has its own script which will be executed in parallel by accordance. For putting an option in the rules_list you need the Option and a script that does the work for the option and then gives a value to the stout. This value will be redirected through a pipe to our main program which will write the config-name for the option into the .config file. How to add a rule: ******************* The basic of the script is that it must give an answer to stdout. Since the rules_list is written in xml there are some conditions for adding rules. To add a rule (for the specified option), you have to know first the option name and the name of the menu that contains it. The easiest way, to do this, is to run make menuconfig, and see in which menu or submenu your option belongs to. Each of those has its own XML-Tag: <rules>: beginnging of the list. <menu name="menu name" must_have=" number ">: Has the attribute "name" and "must_have". In attribute "name" the name of the menu should be written. Attribute "must_have" shows the min. number of option, that in a menu should be choosen for a proper Kernel. <menu> can contains options or submenus(the same as <menu>). <option name="option name"> rule </option> In the attribut name the option name should be written. And the contain of the Option Tag is the name of rule that belongs to that option. example: <rules> <menu name="Networking support" must_have="1"> <option name="Networking support">egrep1.pm "Network|Ethernet"</option> <menu name="Networking menus"> <option name="Packet socket">yes1.pm</option> <option name="Packet socket: mmapped IO">yes1.pm</option> </menu> </menu> </rules> How to make a rule ******************* A rule can be either a script or binary or... The main job is to give out an answer to stout for the actually option-question, it doesn't matter how. We have three types of answer: sym-answers: either y, n, m or \n. string-answer: can be maximal 128 characters option-answer: By the manual configuration normally you have to type an number but a rule for an option should give out an y, if it want to be choosen. For example: the option is "Networking Support" the program looks in the our list (which is called rules_list) to find the "Networking Support" and if this option is in there, a certain script (which we call it a rule) will be executed. In this example the script name is hw_grep1.pm which reads a given Parameter and searches for this Parameter, lspci and dmesg with the help of grep. In this Case the Parameter will be "Ethernet|Network". hw_grep1.pm: $found=''; $found=`lspci | grep "@ARGV"`; if($found ne '') { print("y\n"); } else { $found=`grep -E "@ARGV" /var/log/dmesg `; if($found ne ''){ print("y\n"); } else { print("n\n"); } } 1; This script checks if there is an Ethernet or a Network card on the target System. If it is true, it gives in this case a 'y' to stdout. And for some options there can't be any script-rules, for instance software such as FTP or TCPIP etc..., those question either get answered as 'build in' or as 'module'. !! the answers must always have a '\n' at the end The rule-binary should be copied in the directory <KERNELVERSION>/scripts/kconfig/rules/ Messages: ******************* When the amount of needed Options in some menus are not choosen, messages will be given out in the stdout, at the end of the configuration. Containig Name of the menus. This can be happen: 1. if for some options they rules are not applied. The reason for that is for some Hardware Option there is no rule. 2. if your System doesn't support the Hardware i.e. you don't have an ethernet Card. In this case either your upgrade the autoconfig with rules or your contact me. If you are getting messages please include the following information: 1. a copy of your lspci, /proc/cpuinfo and /var/log/dmesg 2. a copy of your messages TO DO: ******************* 1. The Framework has to be extend for the Systems that aren't supported. 2 .A way to ask for the Hardware-Devices directly from the I/O. Contact: ******************* Suggestion and comments are welcome. Email: Ahmad Reza Cheraghi <[email protected]>
- Follow-Ups:
- Re: A Framework to automatically configure a Kernel
- From: Emmanuel Fleury <[email protected]>
- Re: A Framework to automatically configure a Kernel
- Prev by Date: Re: [patch] x86: fix ESP corruption CPU bug (take 2)
- Next by Date: Re: [DVB patch 14/54] frontend: s5h1420: fixes
- Previous by thread: Re: [patch] x86: fix ESP corruption CPU bug (take 2)
- Next by thread: Re: A Framework to automatically configure a Kernel
- Index(es):